Sangat menjengkelkan bahwa tidak ada solusi yang langsung, dan pembungkusan return new Promise(...)sangat buruk, tetapi saya telah menemukan solusi yang baik untuk digunakan util.promisify(sebenarnya itu juga melakukan pembungkusan yang sama, hanya terlihat lebih bagus).
function voidFunction(someArgs, callback) {
api.onActionwhichTakesTime(someMoreArgs, (response_we_need) => {
callback(null, response_we_need);
});
}
Fungsi di atas belum mengembalikan apa pun. Kita bisa membuatnya mengembalikan Promisedari responseberlalu dalam callbackdengan melakukan:
const util = require('util');
const asyncFunction = util.promisify(voidFunction);
Sekarang kita dapat benar-benar awaityang callback.
async function test() {
return await asyncFunction(args);
}
Beberapa aturan saat menggunakan util.promisify
- Itu
callback harus argumen terakhir dari fungsi yang akan menjadipromisify
- Panggilan balik yang seharusnya harus dalam bentuk
(err, res) => {...}
Lucunya, kita tidak perlu pernah secara spesifik menulis apa yang callbacksebenarnya.