resolve()是否可以在$ j中隐式调用angularjs?

时间:2014-08-19 10:50:08

标签: angularjs promise

https://docs.angularjs.org/api/ng/service/ $ Q 从$ q API的文档中,(successCallback,errorCallback,notifyCallback)返回一个新的promise,它通过successCallback,errorCallback的返回值解析或拒绝。
但是,该网站提供了一个不明确调用解决方案的示例

 promiseB = promiseA.then(function(result) {
    return result + 1;
  });

  // promiseB will be resolved immediately after promiseA is resolved and its value
  // will be the result of promiseA incremented by 1

因此,调用then函数将创建一个新派生的promise,但是$ q如何知道它的状态,因为代码没有调用resolve()或reject()?但由于该网站表示已经解决,所以我假设

return result + 1; 

隐式调用resolve(),是否正确?因此,如果我没有显式调用reject()并继续调用then()并返回一些值,则promises将始终处于解析状态但我不需要显式调用resolve吗?

2 个答案:

答案 0 :(得分:0)

它没有立即解决。正如评论所说:

  

promiseB将在promiseA解决后立即解决

因此,当promiseA承诺得到解决(并且仅在那时)时,promiseB承诺也将得到解决,解析结果promiseA递增1。

您必须明确解析promiseA以解决promiseB

如果在您调用then()来创建promiseB时已经解决了promiseA,那么promiseB将立即被解析。

答案 1 :(得分:0)

答案是,承诺B 隐式解决。

当您使用.then()注册回调承诺(B)时,angular会将其置于$$pending个回调数组中。原始承诺(A)解决后,angular会通过.resolve()回调调用$$pending,将函数作为参数传递给内部。

在示例中,angular将在内部运行如下所示:

promiseB.resolve((function(result){
  return result + 1;
})(resultFromA))

请查看the source,了解更多有关正在发生的事情的详细信息。