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 Promiseder übergebenen responsezurückgibt, callbackindem wir Folgendes tun:
const util = require('util');
const asyncFunction = util.promisify(voidFunction);
Jetzt können wir tatsächlich awaitdie callback.
async function test() {
return await asyncFunction(args);
}
Einige Regeln bei der Verwendung util.promisify
- Das
callbackmuss 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 callbackeigentlich ist.