栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

在Node.js中等待多个回调的惯用方式

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

在Node.js中等待多个回调的惯用方式

更新:

现在,我建议看一下:

  • 承诺

Promise对象用于延迟和异步计算。Promise表示尚未完成的操作,但有望在将来进行。

一个流行的承诺库是蓝鸟。A建议看看为什么答应。

您应该使用promise来解决这个问题:

>     >     fs.readFile("file.json", function (err, val) {>         if (err) {>  console.error("unable to read file");>         }>         else {>  try {>      val = JSON.parse(val);>      console.log(val.success);>  }>  catch (e) {>      console.error("invalid json in file");>  }>         }>     });

变成这个:

>     >     fs.readFileAsync("file.json").then(JSON.parse).then(function (val)> {>         console.log(val.success);>     })>     .catch(SyntaxError, function (e) {>         console.error("invalid json in file");>     })>     .catch(function (e) {>         console.error("unable to read file");>     });
  • 生成器: 例如,通过co。

使用Promise,基于Node.js和浏览器的基于生成器的控制流优势,可让您以一种不错的方式编写非阻塞代码。

>     >     var co = require('co');>  >     co(function *(){>       // yield any promise>       var result = yield Promise.resolve(true);>     }).catch(onerror);>  >     co(function *(){>       // resolve multiple promises in parallel>       var a = Promise.resolve(1);>       var b = Promise.resolve(2);>       var c = Promise.resolve(3);>       var res = yield [a, b, c];>       console.log(res);>       // => [1, 2, 3]>     }).catch(onerror);>  >     // errors can be try/catched>     co(function *(){>       try {>         yield Promise.reject(new Error('boom'));>       } catch (err) {>         console.error(err.message); // "boom">      }>     }).catch(onerror);>  >     function onerror(err) {>       // log any uncaught errors>       // co will not throw any errors you do not handle!!!>       // HANDLE ALL YOUR ERRORS!!!>       console.error(err.stack);>     }

如果我理解正确,我想您应该看一下非常好的异步库。您应该特别看一下该系列。只是来自github页面的摘录的一个副本:

    async.series([        function(callback){ // do some stuff ... callback(null, 'one');        },        function(callback){ // do some more stuff ... callback(null, 'two');        },    ],    // optional callback    function(err, results){        // results is now equal to ['one', 'two']    });    // an example using an object instead of an array    async.series({        one: function(callback){ setTimeout(function(){     callback(null, 1); }, 200);        },        two: function(callback){ setTimeout(function(){     callback(null, 2); }, 100);        },    },    function(err, results) {        // results is now equals to: {one: 1, two: 2}    });

另外,该库还可以在浏览器中运行。



转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/370395.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号