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