gpt4 book ai didi

javascript - Promisify QT 回调到 AngularJS Promise

转载 作者:行者123 更新时间:2023-12-03 01:28:04 25 4
gpt4 key购买 nike

我正在尝试编写一个 QT 用于 angularjs $q promise 的 promisify 函数,但似乎无法理解它。

QT promise 类似于:

method(arg, arg, callback);

因此,如果 C++ 有一个可以连接两个字符串的方法,则调用将是:

method('A', 'B', function(result) {
console.log(result); //would print 'AB'
});

我希望能够 promise 这种方法,这样这样的事情就可以工作:

var promiseMethod = $q.promisify(method);

promiseMethod('A', 'B')
.then(result) {
console.log(result);
}

我开始添加我的装饰器,但似乎无法正确调用实际的方法:

.config(function($provide) {
$provide.decorator('$q', function($delegate, $rootScope) {
$delegate.qtPromisify = function(fn) {

/// ARGH! what goes here!, this don't work.
return function() {
var args = Array.prototype.slice.call(arguments);
return $delegate(function(resolve, reject) {
var result = fn.apply(null, args);
resolve(result);
});
}
};
return $delegate;
});
})

最佳答案

我认为这将类似于 ES6 Promise promisify,因此假设您的回调具有以下签名:function(error, result) {} 我可以想到做类似的事情:

$delegate.qtPromisify = function(fn) {
return function() {
var args = Array.prototype.slice.call(arguments);
return $delegate(function(resolve, reject) {
args.push(function(err, res) {
err ? reject(err) : resolve(res);
});
fn.apply(null, args);
});
};
};

这里我们只是创建一个解析或拒绝的回调,并将其推送到 args 数组,然后使用该数组调用 apply

或者使用 ES6

$delegate.qtPromisify = function(fn) {
return ([args]) => {
return $delegate(function(resolve, reject) {
const callback = (err, res) => (err ? reject(err) : resolve(res));

fn.apply(null, [...args, callback]);
});
};
};

关于javascript - Promisify QT 回调到 AngularJS Promise,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51428068/

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