SAPUI5 Обработка индикатора занятости в импорте функции - PullRequest
0 голосов
/ 20 сентября 2019

Я хочу включить обработчик занятости в импорт моей функции.

Сначала я установил стол на занятое.Затем, когда импорт вызывающей функции будет успешным или ошибочным, мне нужно будет установить для индикатора занятости значение false.

Дело в том, что мне нужно использовать Promise.all для этого (как в функции успеха, так и в функции ошибки).Кто-нибудь есть идеи о том, как использовать Promise.all в этом случае?

        aSelectedItems.forEach(function (oSelectedItem) {

            var oParameter = {
                "ShopId": sShopId,
                "ProductId": oTable.getBinding("items").getModel().getProperty(oSelectedItem.getBindingContextPath() + "/ProductId"),
                "ProductUPC": oTable.getBinding("items").getModel().getProperty(oSelectedItem.getBindingContextPath() + "/CompetitorProductUpc")
            };

            this.getView().byId("idSmartTableItems").setBusy(true);

            oFunctionImportModel.callFunction("/AcceptShopItem", {
                method: "GET",
                urlParameters: oParameter,
                success: function () {
                    this.byId("idSmartTableItems").getTable().removeSelections();
                    this.getModel().refresh();
                }.bind(this),
                error: function (oError) {
                    this.clearMessages();
                    var sMessageBoxText = this.getResourceBundle().getText("errorMessageBox");
                    this.showMessage(oError, sMessageBoxText, false);
                }.bind(this)
            });
        }.bind(this));

1 Ответ

0 голосов
/ 23 сентября 2019

Вы можете обернуть обратный вызов forEach в Promises и сохранить каждое обещание в массиве.Таким образом, вы можете использовать Promise.all для их разрешения.

var aPromises = [];
var oTable = this.byId("idSmartTableItems").getTable();

aSelectedItems.forEach(function (oSelectedItem) {
    aPromises.push(
        new Promise(function(resolve, reject) {
            var oParameter = {
                "ShopId": sShopId,
                "ProductId": oTable.getBinding("items").getModel().getProperty(oSelectedItem.getBindingContextPath() + "/ProductId"),
                "ProductUPC": oTable.getBinding("items").getModel().getProperty(oSelectedItem.getBindingContextPath() + "/CompetitorProductUpc")
            };

            oFunctionImportModel.callFunction("/AcceptShopItem", {
                method: "GET",
                urlParameters: oParameter,
                success: function (oData) {
                    resolve(oData);
                }.bind(this),
                error: function (oError) {
                    reject(oError);
                }.bind(this)
            });
        })
        );
    }.bind(this));

oTable.setBusy(true);

Promise.all(aPromises).then(
    // aData - array of each oData by the success callbacks
    function(aData) {
        oTable.setBusy(false);
        oTable.removeSelections();
        this.getModel().refresh();
    }.bind(this),
    // oError - the first error that happens
    function(oError) {
        oTable.setBusy(false);
        this.clearMessages();
        var sMessageBoxText = this.getResourceBundle().getText("errorMessageBox");
        this.showMessage(oError, sMessageBoxText, false);
    }.bind(this)
);
...