在 ES8 之前的循环中,如何根据包含在循环中的承诺设置标志?
How can I set a flag from a promise that is contained in a loop, pre-ES8?
我想要实现的是向打印服务发送一堆 post 请求,如果其中任何一个失败,我想向用户显示一条警告消息。我当前的设置每次失败时都会有一条警告消息。
items.forEach(function (item) {
var data = {
date: self.getDateTime(),
barcode: item.barcode,
description: item.description
};
var url = 'http://localhost/print_service'
$.ajax({
method: "POST",
url: url,
data: JSON.stringify(data),
}).fail(function () {
self.display_warning(
'Failed to connect to printer',
);
});
});
我无法在此项目中使用异步/等待。
我的想法是设置一些标志,如 printFailed = true
,如果为真,则在循环后显示一条消息。但是,失败当然是异步的,所以现在在我进行检查时设置了标志。
我怎样才能有效地解决这个问题?通常我会将错误和/或标志放入 .then()
,但我不能这样做,因为它仍然会陷入循环。
尝试使用Promise.all
:
const requests = items.map(function(item) {
return $.ajax({
method: "POST",
url: 'http://localhost/print_service',
data: JSON.stringify({
date: self.getDateTime(),
barcode: item.barcode,
description: item.description
}),
});
});
Promise.all(requests).catch(function() {
self.display_warning('Failed to connect to printer', );
});
我想要实现的是向打印服务发送一堆 post 请求,如果其中任何一个失败,我想向用户显示一条警告消息。我当前的设置每次失败时都会有一条警告消息。
items.forEach(function (item) {
var data = {
date: self.getDateTime(),
barcode: item.barcode,
description: item.description
};
var url = 'http://localhost/print_service'
$.ajax({
method: "POST",
url: url,
data: JSON.stringify(data),
}).fail(function () {
self.display_warning(
'Failed to connect to printer',
);
});
});
我无法在此项目中使用异步/等待。
我的想法是设置一些标志,如 printFailed = true
,如果为真,则在循环后显示一条消息。但是,失败当然是异步的,所以现在在我进行检查时设置了标志。
我怎样才能有效地解决这个问题?通常我会将错误和/或标志放入 .then()
,但我不能这样做,因为它仍然会陷入循环。
尝试使用Promise.all
:
const requests = items.map(function(item) {
return $.ajax({
method: "POST",
url: 'http://localhost/print_service',
data: JSON.stringify({
date: self.getDateTime(),
barcode: item.barcode,
description: item.description
}),
});
});
Promise.all(requests).catch(function() {
self.display_warning('Failed to connect to printer', );
});