gpt4 book ai didi

javascript - 使用 1 个或多个 jQuery promise

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

我正在调用 1 个或多个 REST/ajax 来验证一些用户信息。其余调用运行良好,信息正在返回。我面临的问题不在于代码的那部分,它看起来像这样。

function ensureUsers(recipients){
var promises = [];
for(var key in recipients){
var payload = {'property':recipients[key]};
promises.push( $.ajax({...}));
}
return $.when.apply($,promises);
}

....

ensureUsers(users) // users is an array of 1 or more users
.done(function(){
console.log(arguments);
)}

如果初始数组中有多个用户,那么我的 .done 代码中的参数结构如下:

[[Object,"success",Object],[Object,"success",Object]...]

然后我可以遍历每个结果,检查状态,然后继续。

但是,如果初始数组中只有一个用户,则 .done 会得到如下参数:

[Object,"success",Object]

我觉得返回的结构会像那样改变,这让我感到很奇怪。我找不到关于这个特定问题的任何信息,所以我一起破解了一个解决方案

var promises = Array.prototype.slice.call(arguments);
if(!Array.isArray(promises[0])){
promises = [promises];
}

这真的是我所能期望的最好的吗?或者是否有更好的方法来处理 jQuery 中 1 个或多个 ajax 调用返回的 promise ?

最佳答案

It seems strange to me that the structure of what is returned would change like that.

是的,jQuery 在这里非常不一致。当您将单个参数传递给 $.when 时,它会尝试将其转换为 promise ,当您传递多个参数时,它会突然尝试等待所有参数并合并它们的结果。现在抛出 jQuery promises can resolve with multiple values (arguments) 和 add a special case for that .

所以我可以推荐两种解决方案:

  • 完全删除 $.when 并只使用 Promise.all而不是它:

    var promises = [];
    for (var p of recipients) {

    promises.push( $.ajax({…}));
    }

    Promise.all(promises)
    .then(function(results) {
    console.log(results);
    })
  • 让每个 promise 只用一个值解析(不像 $.ajax() 用 3 解析),这样它们就不会被包装在一个数组中,并且 $.when 将产生一致的结果,无论参数数量如何:

    var promises = [];
    for (var p of recipients) {

    promises.push( $.ajax({…}).then(function(data, textStatus, jqXHR) {
    return data;
    }) );
    }

    $.when.apply($, promises)
    .then(function() {
    console.log(arguments);
    })

关于javascript - 使用 1 个或多个 jQuery promise ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40143382/

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