AngularJS $ promise只执行一次

时间:2015-10-13 14:20:03

标签: angularjs

$ promise可以执行多次或任何角度替代。

参考下面的代码。 示例代码: -

promise.then(function(greeting) {
  alert('Success: ' + greeting);
}

...

if () {
     resolve('Hello, ' + name + '!');
} else {
     reject('Greeting ' + name + ' is not allowed.');
}

4 个答案:

答案 0 :(得分:1)

是的,它只会执行一次,可能在angularJS中,你将无法获得替代。你可以尝试jQuery或其他一些东西。 :)

答案 1 :(得分:1)

您可以使用通知回调

  

notify(value) - 提供有关承诺执行状态的更新。在承诺解决或拒绝之前,可以多次调用此方法。

以下(未经测试的)代码应使用数字1-10通知十次,然后解决消息"完成计数"。

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通知,通知不是任何承诺标准的一部分,应被视为不良做法。

答案 2 :(得分:0)

承诺的契约是它只会解决一次,老实说,我无法想象任何有意义的执行不止一次的场景。在一个promise已经解决之后,对then的任何后续调用将在下一个事件循环滴答时被调用,因为promise的值已经被解析并且将被缓存。

这似乎是一个XY问题。你能更详细地解释一下你想要做什么吗?

答案 3 :(得分:0)

你可以通过这个forum,托马斯告诉你如何多次解决一个承诺。

$rootScope.$apply( function() {
  deferred.resolve( incremented );
});