gpt4 book ai didi

javascript - 如何在javascript中对用户函数进行自定义回调

转载 作者:行者123 更新时间:2023-11-29 22:22:40 25 4
gpt4 key购买 nike

我在使用第 3 部分库(例如 jquery)时一直使用回调,但是我遇到了一个问题,我需要设置自己的回调。以我当前的代码为例:

// Get All Rates
function getAllRates() {
$('#shiplist tr.mainRow').each(function() {

var curid = $(this).attr("id");
var cursplit = curid.split("_");
var shipid = cursplit[1];

getRate(shipid);

});

}

这遍历了所有具有类“mainRow”的表行,每个主行的 ID 为“shipment_#####”,因此对于每一行,它按 _ 拆分以获得实际的船舶 ID,这然后它使用调用“getRate”函数,该函数使用 UPS 或 USPS api 向服务器发送 ajax 调用以获取给定货件的费率。

这适用于 UPS 所有行立即开始加载并独立返回它们的费率。现在问题出在 Stamps.com,他们使用经过身份验证的 soap 对话,因此需要从第一次调用中接收验证器字符串并在下一次调用中使用,依此类推。

所以基本上我需要修改上面的函数来执行“getRate()”函数并在执行下一次迭代之前等待它完成。

有谁知道我怎样才能做到这一点而不大惊小怪?

编辑 - 澄清所问问题:

我想采用以下功能:

getRate(shipid);

然后像这样访问它:

getRate(shipid, function(shipList) { _Function_data_here_ });

当我定义 getRate 函数时,如何定义它以使其具有回调功能?这是如何运作的?

最佳答案

我建议您一次提取所有 ID 并将它们传递给您的函数。这样,您可以轻松地单独处理第一个,然后再处理其余的。使用延迟对象,这真的很容易。

例如:

function extractAllIds(callback) {

var ids = $('#shiplist tr.mainRow').map(function() {
return this.id.split('_')[1];
}).get();

callback(ids);
}

function getRates(ids) {
var first = ids.shift();

$.ajax({data: first, ...}).done(function(response) {
// extract the authenticator string
for(var i = ids.length; i--; ) {
$.ajax({data: ids[i], ...});
}
});
}

extractAllIds(getRates);

无论如何,您不能让$.each 等待Ajax 调用的响应。

关于javascript - 如何在javascript中对用户函数进行自定义回调,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11479835/

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