使用延迟对象捕获分离失败
catch separated fails using deferred object
我得到了这个代码(使用 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
和 secondData
(同时)到回调函数?
(我知道如果 $.getJSON
中的一些或两者都失败,我将向回调发送空数据,并且在弹出窗口之前必须进行空检查)
抱歉让您感到困惑 post,在此先感谢您
是的。 Promises 是管道,管道中的每个处理程序都可以转换通过的值或错误,因此如果您真的想要通过添加 catch
处理程序并返回,您可以将失败变成 "success with null
" 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!
}
});
});
}
我得到了这个代码(使用 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
和 secondData
(同时)到回调函数?
(我知道如果 $.getJSON
中的一些或两者都失败,我将向回调发送空数据,并且在弹出窗口之前必须进行空检查)
抱歉让您感到困惑 post,在此先感谢您
是的。 Promises 是管道,管道中的每个处理程序都可以转换通过的值或错误,因此如果您真的想要通过添加 catch
处理程序并返回,您可以将失败变成 "success with null
" 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!
}
});
});
}