javascript - 怎么在babel插件中编译异步回调结果?
PHP中文网
PHP中文网 2017-04-10 17:44:47
[JavaScript讨论组]
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

PHP中文网
PHP中文网

认证0级讲师

全部回复(2)
PHP中文网

试过种种方法之后,我发现了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
       }
}

参考链接

  • https://www.npmjs.com/package/deasync

  • http://blog.csdn.net/xingqiliudehuanghun/article/details/44056151

PHP中文网

如果需要异步转同步,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
  }
}
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 意见反馈 讲师合作 广告合作 最新更新 English
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号