怎么在babel插件中编译异步回调结果?

export default myplugin = ({ type:t }) => {
       let visitor = {
            stringLiteral ( path ) {
                  asyncfn(path, result =>{
                      // do something async
                      // how can i get these async result into ast tree?
                  })
            }
       }
       return {
            visitor
       }
}

https://github.com/babel/babel.github.io/issues/762

阅读 4.2k
2 个回答

试过种种方法之后,我发现了deasync这个包,目前来说是可以实现异步转同步的

有什么副作用就不好说了

"use strict";
const deasync = require('deasync');

function asyncfn(callback){
    //...pipe(...).pipe(...).pipe(...).on("finish",()=>callback(null,"haha"))
}

let asyncfnSync = deasync(asyncfn)

export default myplugin = ({ type:t }) => {
       let visitor = {
            stringLiteral ( path ) {
                let result = asyncfnSyny(path.node)
                //haha..
            }
       }
       return {
            visitor
       }
}

参考链接

如果需要异步转同步,Promise、Generator 和 Async 不是很好的解决方案么?

不知下面的代码是否对你有用。

const asyncfn = (node) => {
  return new Promise((resolve, reject) => {
    // balalala
    //...pipe(...).on( 'finish', () => resolve(null, 'haha') )
  });
};

export default myplugin = ({ type:t }) => {
  let visitor = {
    stringLiteral (path) {

      const getAsyncfnResult = async () => {
        const result = await asyncfn(path.node);
        // haha
      };

      getAsyncfnResult();

    }
  }
  return {
    visitor
  }
}
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题