gpt4 book ai didi

javascript - 如何处理链式 promise 中的错误?

转载 作者:行者123 更新时间:2023-12-03 07:28:20 26 4
gpt4 key购买 nike

我正在构建一个 Angular 应用程序,并且有一个执行 XHR 的工厂,并将 promise 返回给调用它的 Controller 。当我收到错误时,它会被工厂失败方法捕获,但因为我将其作为 promise 返回,所以它仍然调用 Controller 中的成功方法。有没有一种方法可以让工厂错误传递给 Controller ​​失败方法并阻止调用 Controller 成功方法?原因是我想在客户端正确显示成功和错误通知。我的做法完全错误吗?

工厂方法示例:

function add(payload) {
return $http.post('/companies', payload)
.then(success)
.catch(fail);

function success(response) {
return response.data;
}
function fail(error) {
$log.log('Company Factory XHR failed: ', error.data);
}
}

对应的 Controller 方法:

function add(isValid) {
if (isValid) {
var payload = {
company: vm.new_company
};

companyFactory.add(payload)
.then(success)
.catch(fail);
}

function success() {
getCompanies();
vm.new_company = {};
toastrFactory.success("Added company!");
}
function fail(err) {
$log.log('Companies Controller XHR Failed: ' + err.data);
}
}

最佳答案

如果您在 Controller 中处理 promise ,则无需在工厂中处理它。

在工厂里你只想

return $http.post('/companies', payload);

然后处理它,就像您已经在 Controller 中一样,就可以开始了。

使用 .then 和 .catch 是 Promise 上的函数,就像您现在在工厂中执行的方式一样,您不会返回 Promise,而是在 Promise 解决后返回其他内容。您只想单独返回 promise ,即 $http.post() 函数。

编辑:为了增加一点深度,这就是我为此类东西设置工厂的方式......

function factory() {
var self = {};

self.addCompany = function(payload) {
return $http.post('/companies', payload);
}

return self;
}

然后在 Controller 中处理它,例如

factory.addCompany(payload)
.then(function(data) {
console.log('success', data);
})
.catch(function(data) {
console.log('something happened', data);
})

关于javascript - 如何处理链式 promise 中的错误?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35909831/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com