手机版

node.js8中util.promisify的详细说明

时间:2021-09-04 来源:互联网 编辑:宝哥软件园 浏览:

Node.js 8于上月底正式发布,带来了许多新功能。其中,util.promisify()方法值得注意。

util.promisify()

Promise虽然已经普及,但是Node.js中仍然有大量依赖回调的异步函数,如果我们把每个函数封装一次,会比较麻烦,甚至会更麻烦。

因此,Node8提供了util.promisify(),方便我们快速将原来的异步回调方法改为返回Promise实例的方法。接下来,如果我们想继续使用队列,我们需要等待它。

让我们看看这个例子:

const util=require(' util ');const fs=require(' fs ');const stat=util . promisify(fs . stat);stat(' . ') .然后((stats)={ //用‘stats `’做点什么)}。catch((错误)={ //处理错误。});怎么样,很简单吧?根据文档,只要符合Node.js的回调风格,所有函数都可以这样转换,也就是说,满足以下两个条件。

最后一个参数是函数回调函数的参数是(err,result),前面是可能的错误,后面是正常结果,这些结果与Await/Async结合使用

与上面的示例相同,如果您想要组合Await/Async,您可以这样使用它:

const util=require(' util ');const fs=require(' fs ');const stat=util . promisify(fs . stat);async函数readStats(dir){ try { let stats=wait stat(dir);//用` stats` } catch (err) { //处理错误。console . log(err);}}readStats(' . ');自定义承诺处理功能

如果函数不符合这种风格,那么util.promisify()还能用吗?答案也是肯定的。我们只需要给函数util.promisify.custom添加一个属性,并指定一个函数作为Promise处理函数。请参见以下代码:

const util=require(' util ');函数doSomething(foo,callback) { //.} do something[util . promisify . custom]=function(foo){ return getpromisomehow();};const promisized=util . promisize(DosMeming);console . log(promisalized===doSomething[util . promisify . custom]);//打印‘true’这样,每当我们Promise目标函数dosome的时候,我们就会得到之前定义的函数。运行它将根据我们设计的特定逻辑返回一个Promise实例。

我们可以升级所有以前的异步回调函数。

承诺游戏攻略

由于各种历史原因,JS中有很多异步函数。这些异步函数大多依赖回调进行处理(这里我认为把事件拦截算作回调是合理的),但是嵌套回调越多,就会形成所谓的“回调陷阱”,让开发人员苦不堪言。

为了解决这个问题,开发界探索总结出了一套叫做promise/a的解决方案,一般来说,这个方案用“promise回调实例”来包裹原来的回调函数,可以将原来复杂的嵌套进行扩散和铺垫,从而降低开发和维护的难度和成本。

NewPromise((解析,拒绝)={//构建Promise实例somasync function((err,结果)={//调用原异步函数如果(err) {//出错,进入错误处理模式返回reject(err);}解决(结果);//一切正常,进入队列中下一个环节});}) .然后(result={//在下一步中返回doSomething(结果);}) .然后(result2={//并返回dosame 2(result 2);}) .//各种中间环节。catch(err={//错误处理控制台. log(err));});ES2015(ES6)包含Promise标准,大多数运行时都安装了Promise标准,所以我们可以放心大胆地使用它。此外,由于Promise不需要新的语法元素,所以即使在不支持原生Promise的环境中,也可以使用q或Bluebird甚至jQuery之类的类库。

它也适用于小程序。

S2017增加了等待/异步语法,但是请注意,等待后面必须跟有Promise实例才能实现异步。所以,还是好好学习Promise这个概念吧!

函数解析时间2秒返回新的promise(resolve={ setTimeout(()={ resolve(x);}, 2000);});}异步函数f1(){ var x=await resolveafter2s(10);控制台。log(x);//10 } f1();以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持我们。

版权声明:node.js8中util.promisify的详细说明是由宝哥软件园云端程序自动收集整理而来。如果本文侵犯了你的权益,请联系本站底部QQ或者邮箱删除。