我正在处理一个小型项目,需要对各种API端点进行多次AJAX调用。前三个需要相互连续的数据,后三个可以独立运行,因为它们与前三个没有任何关系。
这是我第一次主要涉及async / await,并且实际上将promises用于其预期目的,并且我对如何处理任何异常感到困惑。我们正在使用Vue.js作为我们的前端框架并使用JSON响应。
我用这个函数调用包含我的请求的函数:
fetchAllData: async function() {
await this.getList()
await this.getSecondListRelatedToFirst()
await this.getThirdListRelatedToFirstAndSecond()
this.getDateRange()
getConversions()
getVolumes()
}
请求现在如何运行:
this.getList()
|------------> this.getSecondListRelatedToFirst()
|----------> this.getThirdListRelatedToFirstAndSecond()
|------> this.getDateRange()
|------> getConversions()
|------> getVolumes()
运行 this.getList()
,然后this.getSecondListRelatedToFirst()
在this.getList()
结算时运行,最后四个在this.getSecondListRelatedToFirst()
结算时运行。
请求的结构与此非常类似:
getList: function () {
return $.ajax({
type: "GET",
url: '/api/endpoint',
dataType: 'json',
data: {
param_one : param_one,
param_two : param_two,
param_three: param_three,
...
}
})
.then(function(data, status, xhr) {
let temp = _.map(data, function (d) {
return {
// map some data here
}
}.bind(this));
}, function(jqXhr, textStatus, errorThrown) {
console.error(errorThrown);
})
.catch(function(error){
console.log.bind(error)
})
基本的想法是,一旦响应从服务器返回,我将数据操作为更容易被Vue消费的内容,并随着呈现页面一起移动。
转到第一个函数fetchAllData
,在mounted
生命周期属性中调用,如下所示:
$.when( this.fetchAllData() )
.then( function() {
// do some other stuff
})
.fail(
console.log.bind(console);
);
这就是我的问题所在。考虑到我在AJAX级别上执行错误捕获(使用then,catch块),我是否还需要在此处执行错误捕获?如果是这样,我将如何在$.when
块中实现这一目标?或者最终的fail
声明在执行的这一点上是否足够?
这个问题可能是一个阅读方式太多的用例以及对Vue.js和async / await的经验不足的情况,我只需要对这类场景的最佳实践进行一些澄清。谢谢你的指导!
答案 0 :(得分:1)
我认为您需要查看MDN documentation。
var response = await promisedFunction().catch((err) => { console.log(err); });
// response will be undefined if the promise is rejected
也许它会回答你的问题。