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 Promise
dari response
berlalu dalam callback
dengan melakukan:
const util = require('util');
const asyncFunction = util.promisify(voidFunction);
Sekarang kita dapat benar-benar await
yang 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 callback
sebenarnya.