使用角$ q.all处理错误

时间:2015-06-30 14:50:22

标签: angularjs asynchronous error-handling

我有一个角度应用程序,向用户显示可编辑的网格。允许用户编辑网格中的多个行,然后一次保存所有这些更改。当他们这样做时,我使用$q.all并行发送对API的所有更新调用。

我希望能够为每个失败的调用向用户显示错误,其中包含有关未正确保存的对象的一些信息,但我无法弄清楚如何从中获取该信息。错误处理程序。

var ops = []

_.each($scope.items, function (item) {
    if(item.Modified)
        ops.push(dataService.update(item.itemID, item.otherField))
})

$q.all(ops)
.then(function (repsonse) {
    //success
},
function (response) {
    //in here I want to output the itemID and otherField values for the item(s) that failed
})

在API调用中发送的每个项目都有一些属性(itemIDotherField)。我希望这些值包含在用户的错误消息中。

这可能使用q.all还是我必须使用其他方法?

1 个答案:

答案 0 :(得分:1)

如果任何操作随时失败,

$q.all将触发错误回调,但在您的情况下,您只想记录哪些(如果有)失败而不触发任何其他操作错误。我会使用从.catch返回一个承诺:

ops.push(dataService.update(item.itemID, item.otherField))
.catch(function () {
    return {
        status: "failed",
        id: item.itemID
    };
});

然后在$q.all的回调中,您可以迭代回复并检查.status == "failed"并检查这些ID。