在 AngularJS 中难以检索链式承诺中的 return 数据
Difficulty in retrieving the return data in chained promises in AngularJS
我正在尝试通过使用链式承诺找到解决 AngularJS 异步性质的方法。
但是,当有多个链时,我很难获得 return 数据。在下面,function1()
returns 一个 deferred promise (output1)
,我想在函数 step2()
和 [=17] 中传递=].有什么办法吗?
dataList.get().$loaded()
.then(function step1() { initCanvas(); return function1() })
.then(function step2(output1) { function2(output1); })
.then(function step3(output1) { function3(output1); $scope.loading = false; })
.catch(function(error) {
window.alert("Error: " + error)
$scope.loading = false;
});//dataList()
解决方案
dataList.get().$loaded()
.then(function step1() { initCanvas(); return function1() })
.then(function step2(output1) { function2(output1); return output1;}) // add return statement!!
.then(function step3(output1) { function3(output1); $scope.loading = false; })
.catch(function(error) {
window.alert("Error: " + error)
$scope.loading = false;
});//dataList()
在链的每个 .then 部分,您需要 return 将您想要的数据传递到链的下一部分。
.then(function(prevThenReturn) {
return 'a';
}).then(function(thisEqualsA) {
console.log(thisEqualsA)
})
我正在尝试通过使用链式承诺找到解决 AngularJS 异步性质的方法。
但是,当有多个链时,我很难获得 return 数据。在下面,function1()
returns 一个 deferred promise (output1)
,我想在函数 step2()
和 [=17] 中传递=].有什么办法吗?
dataList.get().$loaded()
.then(function step1() { initCanvas(); return function1() })
.then(function step2(output1) { function2(output1); })
.then(function step3(output1) { function3(output1); $scope.loading = false; })
.catch(function(error) {
window.alert("Error: " + error)
$scope.loading = false;
});//dataList()
解决方案
dataList.get().$loaded()
.then(function step1() { initCanvas(); return function1() })
.then(function step2(output1) { function2(output1); return output1;}) // add return statement!!
.then(function step3(output1) { function3(output1); $scope.loading = false; })
.catch(function(error) {
window.alert("Error: " + error)
$scope.loading = false;
});//dataList()
在链的每个 .then 部分,您需要 return 将您想要的数据传递到链的下一部分。
.then(function(prevThenReturn) {
return 'a';
}).then(function(thisEqualsA) {
console.log(thisEqualsA)
})