AngularJS链接的承诺和最终回调

3

我有两个promise函数。如果第一个函数出现错误,我想要显示一个错误消息。当其中任何一个完成或失败时,我希望它们执行最终的捕获所有函数,但由于某种原因它不起作用。 我的代码如下:

// If our garment has a logo
shared.logoExists(garment, model).then(function () {

    // Save our panel
    return shared.save(model);

// If there was an error
}, function () {

    // Display an error message
    toastr.warning(localization.resource.logoPlacementError.message);

// Always close the library
}).finally(function () {

    // Reset our attachments
    self.resetAttachment();

    // Hide our library
    self.closeLibrary();
});

基本上我想要实现的是,如果第一个函数失败了,它会显示错误。 当第二个函数失败时,它不会做任何事情。 但是如果其中一个成功或失败,它总是会关闭库。

有人知道我怎样才能实现这个吗?


我喜欢这个问题 - 我现在正在构建它。 - Katana24
1
有什么问题?有抛出任何错误吗? - charlietfl
3个回答

1

在关闭then函数之后,您需要使用.catch:

// If our garment has a logo
shared.logoExists(garment, model).then(function () {

    // Save our panel
    return shared.save(model);

// If there was an error
}).catch(function () {

    // Display an error message
    toastr.warning(localization.resource.logoPlacementError.message);

// Always close the library
}).finally(function () {

    // Reset our attachments
    self.resetAttachment();

    // Hide our library
    self.closeLibrary();
});

不解释为什么“必须使用catch”。在catch中没有返回任何内容,因此实际上在这里并没有太大的有效区别。 - charlietfl
承诺模式的结构可能导致 finally 函数未被调用。这只是一个尝试的想法。根据他的代码结构,他希望能够识别是否存在错误,因此使用了 catch 函数。 - Jaime Still
使用"你必须使用"和"试试这个"之间有很大的区别。虽然在使用catch代替then的第二个参数方面有一些支持性的论点,但它们在这里没有被提及。 - charlietfl
1
那么请随意提供它们。 - Jaime Still

0
根据您使用的Angular版本,您可能需要使用“always”而不是“finally”。尝试使用“always”并查看是否有效。
{{link1:如何在Angular.js中始终运行某些代码以实现承诺的实现}}

0
原来我的方法很好用。 logoExists 函数没有在所有应该的地方解决/拒绝承诺。当我修复了这个问题后,上面的代码就可以工作了。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接