令人讨厌的是,没有一个简单的解决方案,而且包装return new Promise(...)
很糟糕,但我发现了一个不错的解决方法util.promisify
(实际上它也有点做同样的包装,只是看起来更好)。
function voidFunction(someArgs, callback) {
api.onActionwhichTakesTime(someMoreArgs, (response_we_need) => {
callback(null, response_we_need);
});
}
上面的函数还没有返回任何东西。我们可以把它返回Promise
的response
传入callback
做:
const util = require('util');
const asyncFunction = util.promisify(voidFunction);
现在我们实际上可以await
将callback
.
async function test() {
return await asyncFunction(args);
}
使用时的一些规则 util.promisify
- 的
callback
必须是函数的最后一个参数是要去promisify
- 假定的回调必须采用以下形式
(err, res) => {...}
有趣的是,我们不需要特别写出callback
实际情况。