AngularJS $promise只执行一次



$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 );
});

最新更新