簡単な解決策がないの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
実際に何であるかを具体的に書く必要はありません。