gpt4 book ai didi

javascript - 如何将具有两个回调的函数调用转换为 promise

转载 作者:搜寻专家 更新时间:2023-10-31 22:45:38 25 4
gpt4 key购买 nike

我有这样一个函数:

var f = function(options, successCallback, errorCallback) {
...
}

我想将其调用转换为 promise 。我目前的解决方案是这样的:

var deferred = Q.defer();

f(options,
function (result) {
deferred.resolve(result);
}, function (err) {
deferred.reject(err);
}
);

return deferred.promise;

我不能使用 Q.fcall,因为它需要一个 Node.js 风格的回调 function(err, result) { ... }

那么,有没有办法使用 Q API 改进我的代码? ?

最佳答案

不,所有这些辅助函数(基于 Deferred.makeNodeResolver )只是为了处理丑陋的 Node 。如果回调式方法已经采用单独的成功和错误回调,则不需要做太多额外的工作。

您可以通过删除那些不必要的闭包函数表达式来简化您的模式:

var deferred = Q.defer();
f(options, deferred.resolve, deferred.reject);
return deferred.promise;

您还可以使用 Promise constructor ,这是创建 promise 的首选方法(奖励:通过 f 捕获异常 thrown):

return new Q.Promise(function(resolve, reject) {
f(options, resolve, reject);
});

甚至可以通过部分应用来缩短

return new Q.Promise(f.bind(null, options));

另请参阅通用引用:How do I convert an existing callback API to promises?

关于javascript - 如何将具有两个回调的函数调用转换为 promise,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26253682/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com