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吗?
答案 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,了解更多有关正在发生的事情的详细信息。