Es ist ärgerlich, dass es keine einfache Lösung gibt und das Wickeln return new Promise(...)
schwierig ist, aber ich habe eine gute Umgehungsmöglichkeit gefunden util.promisify
(tatsächlich macht es auch irgendwie das gleiche Wickeln, sieht einfach besser aus).
function voidFunction(someArgs, callback) {
api.onActionwhichTakesTime(someMoreArgs, (response_we_need) => {
callback(null, response_we_need);
});
}
Die obige Funktion gibt noch nichts zurück. Wir können dafür sorgen, dass es eines Promise
der übergebenen response
zurückgibt, callback
indem wir Folgendes tun:
const util = require('util');
const asyncFunction = util.promisify(voidFunction);
Jetzt können wir tatsächlich await
die callback
.
async function test() {
return await asyncFunction(args);
}
Einige Regeln bei der Verwendung util.promisify
- Das
callback
muss das letzte Argument der Funktion sein, die es geben wirdpromisify
- Der angebliche Rückruf muss in der Form vorliegen
(err, res) => {...}
Lustige Sache ist, dass wir nie speziell schreiben müssen, was das callback
eigentlich ist.