我得到了这段代码(使用jquery)
function getData(applyFunction, callback) {
$.when(
$.getJSON("http://www.mocky.io/v2/59d72b5b120000c902cb1b4f"),
$.getJSON("http://www.mocky.io/v2/59d72b5b120000c902cb1b4f"),
).done(function(
firstData,
secondData
){
callback(applyFunction, {
firstDataToApply: { data: firstData.popup },
secondDataToApply: { data: secondData.popup }
})
})
}
有没有办法从$.getJSON
部分(或when
部分)捕获单独的错误,记录这些错误,仍然能够同时发送firstData
和{{1 (同时)回调函数?
(我知道如果某些或两个secondData
失败,我会向回调发送空数据,并且必须在弹出之前进行空检查)
抱歉这个令人困惑的帖子,提前谢谢
答案 0 :(得分:1)
是。 Promise是管道,管道中的每个处理程序都可以转换通过的值或错误,因此您可以使用null
"将失败转化为成功。如果您真的希望通过添加catch
处理程序并从中返回null
(或者您希望将错误转换为其中的任何值)来实现。请参阅下面的catch
电话以及评论:
function getData(applyFunction, callback) {
$.when(
$.getJSON("http://www.mocky.io/v2/59d72b5b120000c902cb1b4f")
.catch(function(err) {
console.error(err);
return null;
}),
$.getJSON("http://www.mocky.io/v2/59d72b5b120000c902cb1b4f")
.catch(function(err) {
console.error(err);
return null;
})
).done(function(firstData, secondData) {
callback(applyFunction, {
firstDataToApply: {
data: firstData.popup // You'll need checks on this!
},
secondDataToApply: {
data: secondData.popup // And this!
}
});
});
}
当然,如果你要这样做超过一次或两次,你可以避免重复自己的功能:
function getJSONOrNull(url) {
return $.getJSON(url).catch(function(err) {
console.error(err);
return null;
});
}
然后
function getData(applyFunction, callback) {
$.when(
getJSONOrNull("http://www.mocky.io/v2/59d72b5b120000c902cb1b4f"),
getJSONOrNull("http://www.mocky.io/v2/59d72b5b120000c902cb1b4f")
).done(function(firstData, secondData) {
callback(applyFunction, {
firstDataToApply: {
data: firstData.popup // You'll need checks on this!
},
secondDataToApply: {
data: secondData.popup // And this!
}
});
});
}