gpt4 book ai didi

javascript - 自定义 javascript 函数中的成功处理

转载 作者:搜寻专家 更新时间:2023-11-01 04:19:21 25 4
gpt4 key购买 nike

如果我进行 ajax 调用,我可以添加成功处理。我想向我的自定义函数添加类似的逻辑。

我有 6-10 个必须按顺序或独立运行的自定义函数。它们通常不会独立运行,所以我现在通过在前一个函数的末尾调用下一个函数,将它们以菊花链方式连接起来,但这读起来很乱,而且不允许单独执行。

我很想拥有这样的东西:

function runall(){
runfirst().success(
runsecond().success(
runthird()
))
}

我有过其他情况,我想将 .success() 处理添加到自定义函数,但这种情况使它变得更加重要。

如果有另一种方法强制 6-10 个函数同步运行,那可以解决这个问题,但我也想知道如何为我的自定义函数添加成功处理。

我根据@lanzz 的建议尝试了以下方法:

我将 .then() 添加到我的函数中:

$bomImport.updateGridRow(rowId).then(function () {
$bomImport.toggleSubGrid(rowId, false);
});


var $bomImport = {
updateGridRow: function (rowId) {
$('#' + rowId + ' td[aria-describedby="bomImport_rev"]').html($("#mxRevTxt").val());
$('#' + rowId + ' td[aria-describedby="bomImport_itemno"]').html($("#itemNoTxt").val());
$('#' + rowId + ' td[aria-describedby="bomImport_used"]').html($("#usedTxt").val());
$('#' + rowId + ' td[aria-describedby="bomImport_partSource"]').html($("#partSourceTxt").val());
$('#' + rowId + ' td[aria-describedby="bomImport_partClass"]').html($("#partClassTxt").val());
$('#' + rowId + ' td[aria-describedby="bomImport_partType"]').html($("#partTypeTxt").val());
$('#' + rowId + ' td[aria-describedby="bomImport_partno"]').html($("#mxPnTxt").val());
$('#' + rowId + ' td[aria-describedby="bomImport_descript"]').html($("#descTxt").val());
$('#' + rowId + ' td[aria-describedby="bomImport_qty"]').html($("#qtyTxt").val());
$('#' + rowId + ' td[aria-describedby="bomImport_custPartNo"]').html($("#custPartNoTxt").val());
$('#' + rowId + ' td[aria-describedby="bomImport_crev"]').html($("#custRevTxt").val());
$('#' + rowId + ' td[aria-describedby="bomImport_u_of_m"]').html($("#uomTxt").val());
$('#' + rowId + ' td[aria-describedby="bomImport_warehouse"]').html($("#warehouseTxt").val());
$('#' + rowId + ' td[aria-describedby="bomImport_standardCost"]').html($("#stdCostTxt").val());
$('#' + rowId + ' td[aria-describedby="bomImport_workCenter"]').html($("#wcTxt").val());
var defferred = new $.Deferred();
return defferred.promise();
}};

代码正确地转到了 updateGridRow 的末尾,没有给出任何错误,但永远不会返回调用第二个函数。

我还按照@Anand 的建议尝试了以下方法:

workSheetSaveExit(rowId, isNew).save().updateRow().toggle();
function workSheetSaveExit(){
this.queue = new Queue;
var self = this;
self.queue.flush(this);
}
workSheetSaveExit.prototype = {
save: function () {
this.queue.add(function (self) {
$bomImport.workSheetSave(rowId, isNew);
});
return this;
},
updateRow: function () {
this.queue.add(function (self) {
$bomImport.updateGridRow(rowId);
});
return this;
},
toggle: function () {
this.queue.add(function (self) {
$bomImport.toggleSubGrid(rowId, false);
});
return this;
}
};

哪个没用。

最终解决方案
有关如何使用 deferred 并使这项工作有效的详细解释,请参见此处: Using Deferred in jQuery

最佳答案

如何使用Deferreds :

function somethingAsynchronous() {
var deferred = new $.Deferred();
// now, delay the resolution of the deferred:
setTimeout(function() {
deferred.resolve('foobar');
}, 2000);
return deferred.promise();
}

somethingAsynchronous().then(function(result) {
// result is "foobar", as provided by deferred.resolve() in somethingAsynchronous()
alert('after somethingAsynchronous(): ' + result);
});

// or, you can also use $.when() to wait on multiple deferreds:
$.when(somethingAsynchronous(), $.ajax({ something })).then(function() {
alert('after BOTH somethingAsynchronous() and $.ajax()');
});

如果您的函数只是发出一个 AJAX 请求,您可以只返回 $.ajax() 返回的实际 promise :

function doAjax() {
return $.ajax({ /* ajax options */ });
}

doAjax().then(function() {
alert('after doAjax()');
});

关于javascript - 自定义 javascript 函数中的成功处理,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11099973/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com