Node.js 8 中的 util.promisify的详解

2020-06-17 06:41:06易采站长站整理

为了解决这个问题,开发社区经过摸索,总结出来一套名为 Promise/A+ 的解决方案。大体上来说,这套方案通过使用 “Promise 回调实例”包裹原先的回调函数,可以将原先复杂的嵌套展开、铺平,从而降低开发和维护的难度和成本。


new Promise( (resolve, reject) => { // 构建一个 Promise 实例
someAsyncFunction( (err, result) => { // 调用原来的异步函数
if (err) { // 发生错误,进入错误处理模式
return reject(err);
}
resolve(result); // 一切正常,进入队列的下一环节
});
})
.then( result => { // 下一环节
return doSomething(result);
})
.then( result2 => { // 又下一环节
return doSomething2(result2);
})
... // 各种中间环节
.catch( err => { // 错误处理
console.log(err);
});

ES2015(ES6)里包含了 Promise 标准,如今已经在大部分运行时里实装,我们可以放心大胆的使用它。而且,由于 Promise 不需要新的语法元素,所以即使在不支持原生 Promise 的环境里也可以使用类库,比如 Q 或者 Bluebird ,甚至 jQuery 。

在小程序里也有效哟。

ES2017 增加了 Await/Async 语法,但请注意, Await 后面必须跟 Promise 实例才能实现异步。所以,大家还是把 Promise 的概念学好吧!


function resolveAfter2Seconds(x) {
return new Promise(resolve => {
setTimeout(() => {
resolve(x);
}, 2000);
});
}

async function f1() {
var x = await resolveAfter2Seconds(10);
console.log(x); // 10
}
f1();