$promise可以多次执行吗或者在angular中任意替代
参考下面的代码。示例代码:
promise.then(function(greeting) {
alert('Success: ' + greeting);
}
...
if () {
resolve('Hello, ' + name + '!');
} else {
reject('Greeting ' + name + ' is not allowed.');
}
是的,它只会执行一次,可能在angularJS中你不会得到替代。您可以尝试jQuery或其他东西。:)
您可以使用notify回调
notify(value) -提供承诺执行状态的更新。在承诺被解析或拒绝之前,可以多次调用。
下面的(未经测试的)代码应该用数字1-10通知10次,然后用消息"Done counting"解决。
function countToTen() {
return $q(function(resolve, reject, notify) {
for (var counter=1; counter <= 10; counter++) {
setTimeout(function() {
notify(counter);
}, 1000 * counter);
}
setTimeout(function() { resolve("Done counting"); }, 10001);
});
}
编辑:正如ARedHerring注意到的,notify不是任何承诺标准的一部分,应该被认为是不好的做法。
承诺的契约是它只会解决一次,老实说,我真的无法想象任何情况下它执行多次是有意义的。在promise被解析后,任何对then
的后续调用将在下一个事件循环tick时被调用,因为promise的值已经被解析并将被缓存。
这似乎是一个XY问题。你能更详细地解释一下你想做什么吗?
你可以通过这个论坛,托马斯告诉你如何解决一个承诺多次
$rootScope.$apply( function() {
deferred.resolve( incremented );
});