处理完成后阻止上传(带回调函数?)

时间:2017-10-30 15:42:44

标签: javascript knockout.js

我在上传交付对象的应用中有一个上传按钮,但我不知道如何延迟例程的上传部分,直到它完成处理部分。我目前使用了一个超时的粘性石膏,希望允许所有处理完成,但我认为我需要在某个地方放置另一个回调功能。

下面是完整的代码,但是这个位需要在进入setTimeout内的函数部分之前完成处理。

var deliveries = Enumerable.From(results).Select(function (r) {
    r.transactionDate = r.transactionDate.format("YYYY-MM-DD HH:mm:ss");
    return r;
}).ToArray();

完整代码:

me.uploadClicked = function () {
   playClicked();
    coreViewModel.busyMessage("Processing delivery data...");

    deliveryRepository.GetTodaysDeliveries(function (results) {
        var deliveries = Enumerable.From(results).Select(function (r) {
            r.transactionDate = r.transactionDate.format("YYYY-MM-DD HH:mm:ss");
            return r;
        }).ToArray();


        window.setTimeout(function () {
            coreViewModel.busyMessage("Uploading delivery data...");

            var objUploadDeliveries = Object.create({
                objStore: Object.create({
                    storeTypeID: coreViewModel.store.storeTypeID(),
                    storeID: coreViewModel.store.id()
                }),
                objDeliveries: deliveries
            });

            var comm = new URLHelper();
            var xhr = $.ajax({
                url: comm.hosturl() + "UploadDelivery",
                type: 'POST',
                beforeSend: function(xh) { xh.setRequestHeader("token", coreViewModel.token); },
                data: objUploadDeliveries,
                dataType: 'json',

                success: function (result) {
                    if (!result) {
                        playError();
                        return;
                    }
                    playUploadComplete();
                },
                error: function (x, e) {
                    playError();
                    errorHandler(x, e);
                    },
                timeout: 60000
            });
        }, 20000);
    });
}

GetTodaysDeliveries函数如下:

GetTodaysDeliveries: function (callback) {
    deliverysDatabase.GetDeliveries(function (results) {
        $.each(results, function (index, result) {
            result.transactionDate = moment(result.transactionDate).utc();
        });

        var todaysResults = Enumerable.From(results).Where(function (r) {
            return moment().isSame(r.transactionDate, 'day');
        }).ToArray();

        return callback(todaysResults);
    });
}

和deliverydatabase.GetDeliveries函数内部如下:

GetDeliveries: function (callback) {
    var me = this;

    db.transaction(
        function (context) {
            context.executeSql("SELECT barcode, titleName, delivered, expected, isNews, supplier, supplierId, transactionDate FROM delivery ORDER BY titlename", [], function (context, result) {
                if (result.rows.length > 0) {
                    var results = [];
                    for (var i = 0; i < result.rows.length; i++) {
                        results.push(result.rows.item(i));
                    }

                    return callback(results);
                } else {
                    return callback([]);
                }
            }, me.ErrorHandler);
        }
        , me.ErrorHandler);
}

0 个答案:

没有答案