没有一个简单的解决方案很烦人,而且包装return new Promise(...)
很丑,但是我发现了一个很好的解决方法util.promisify
(实际上它也有点做同样的包装,只是看起来更好)。
function voidFunction(someArgs, callback) {
api.onActionwhichTakesTime(someMoreArgs, (response_we_need) => {
callback(null, response_we_need);
});
}
上面的函数还没有返回任何东西。我们可以通过执行以下操作使其返回传入的Promise
a :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
实际情况。