$q.all 在 then 子句中
$q.all in a then Clause
在承诺链 then
子句中使用 $q.all
的正确方法是什么?
这里有一些伪类型代码来说明我正在尝试做的事情。
function nestedPromise(val)
{
return aPromiseReturningFunction(val)
.then($q.all(val.arrayProperty.map(function(anotherVal)
{
return anotherPromiseReturningFunction({
prop1: anotherVal.prop
});
})));
}
预期:如果在对 $q.all
的调用中返回的任何承诺被拒绝,则 nestedPromise
返回的承诺将被拒绝。
实际:nestedPromise
返回的承诺已解决,即使在对 $q.all
的调用中返回的承诺之一被拒绝。
我无法post我尝试过的所有事情都无法使它正常工作,因为我觉得我已经尝试了几乎所有的事情......catch
到处都是,使用deferred
, 等等。我想我曾通过使用大量的延迟和 catch
es 得到了 "working" 的东西,但它真的很丑而且它肯定没有用,因为我知道我是什么做。
我对 运行 的 $q.all
并行调用中的所有函数调用是否符合预期行为?这似乎是目前正在发生的事情,因为即使在一个承诺被拒绝后,其余的继续 运行。目前,我可以处理这种行为,虽然它看起来不太正确,我想知道如何在遇到第一次拒绝后停止执行。
then()
需要一个函数传递给它。您目前正在此处传递另一个 Promise 对象
then($q.all(val.arrayProperty.map(function(anotherVal)
你应该这样做
function nestedPromise(val) {
return aPromiseReturningFunction(val)
.then(function() {
return $q.all(val.arrayProperty.map(function(anotherVal) {
return anotherPromiseReturningFunction({
prop1: anotherVal.prop
});
})
});
}
在承诺链 then
子句中使用 $q.all
的正确方法是什么?
这里有一些伪类型代码来说明我正在尝试做的事情。
function nestedPromise(val)
{
return aPromiseReturningFunction(val)
.then($q.all(val.arrayProperty.map(function(anotherVal)
{
return anotherPromiseReturningFunction({
prop1: anotherVal.prop
});
})));
}
预期:如果在对 $q.all
的调用中返回的任何承诺被拒绝,则 nestedPromise
返回的承诺将被拒绝。
实际:nestedPromise
返回的承诺已解决,即使在对 $q.all
的调用中返回的承诺之一被拒绝。
我无法post我尝试过的所有事情都无法使它正常工作,因为我觉得我已经尝试了几乎所有的事情......catch
到处都是,使用deferred
, 等等。我想我曾通过使用大量的延迟和 catch
es 得到了 "working" 的东西,但它真的很丑而且它肯定没有用,因为我知道我是什么做。
我对 运行 的 $q.all
并行调用中的所有函数调用是否符合预期行为?这似乎是目前正在发生的事情,因为即使在一个承诺被拒绝后,其余的继续 运行。目前,我可以处理这种行为,虽然它看起来不太正确,我想知道如何在遇到第一次拒绝后停止执行。
then()
需要一个函数传递给它。您目前正在此处传递另一个 Promise 对象
then($q.all(val.arrayProperty.map(function(anotherVal)
你应该这样做
function nestedPromise(val) {
return aPromiseReturningFunction(val)
.then(function() {
return $q.all(val.arrayProperty.map(function(anotherVal) {
return anotherPromiseReturningFunction({
prop1: anotherVal.prop
});
})
});
}