繁体   English   中英

如何保证一个具有多个回调参数的函数?

[英]How to Promisify a function that has multiple callback parameters?

我编写了许多函数来接受两个回调和一些我想承诺的参数。 例:

function myFunction(successCallback, failureCallback, someParam)

给定上述功能,我将如何使用Promise库(例如Bluebird)来实现successCallbackfailureCallback

我已经试过了,但是返回undefined

const myFunctionAsync = Promise.promisify(myFunction);
console.log(await myFunctionAsync('someParam')); // undefined

可行但过于冗长的解决方案:

const myFunctionAsync = new Promise((resolve, reject) => 
    myFunction(success => resolve(success), failure => reject(failure))
);
console.log(await myFunctionAsync('someParam')); // success

我正在寻找一种将这些笨拙的多个回调函数转换为Promises而不包装每个回调函数的方法。

非常感谢。

您可以编写自己的promisify函数版本,该函数将考虑该函数签名:

 function myFunction(successCallback, failureCallback, someParam) { setTimeout(_ => successCallback('ok:' + someParam), 100); } function myPromisify(f) { return function(...args) { return new Promise( (resolve, reject) => f(resolve, reject, ...args) ); } } async function test() { const myFunctionAsync = myPromisify(myFunction); console.log(await myFunctionAsync('someParam')); // success } test(); 

蓝鸟(Bluebird)或其他方式,使功能散布化并不难。 您的解决方案过于冗长。 尝试:

const myFunctionAsync = (...a) => new Promise((r, e) => myFunction(r, e, ...a));

是的,这包装了每个包装,但是每个功能只有一行,除非您的所有功能都遵循某种模式并且将它们排列在数组中,否则没什么大不了的。 也就是说,您假设其他参数位于结尾而不是开头。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM