在 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', );
});