gpt4 book ai didi

jquery ajax - 使用 promise /延迟对象来处理同一 ajax 调用的不同回调?

转载 作者:行者123 更新时间:2023-12-01 04:50:33 25 4
gpt4 key购买 nike

因此请考虑以下场景:

我想在我的电子商务脚本中多次检查产品的库存情况。

我所做的是

var checkStock = function(id) {
$.ajax({
type: "POST",
dataType:'json',
url: "class/updateCart.php",
data: { productID: id, action: 'checkStock' }
}).done(function(data) {
return parseInt(data.stock);
}).fail(function(data) {
return 'AJAX FAILED';
});
}

所以现在我想像这样使用它:

if(checkStock(productID) == 0) {
// do something (A)
}

这显然不起作用,所以在我的研究中我发现了这个:

jQuery: Return data after ajax call success & How do I return the response from an asynchronous call?

对延迟对象/ promise 有非常好的解释。但不知怎的,我看不出两者之间的区别

var checkStock = function(id) {
$.ajax({
type: "POST",
dataType:'json',
url: "class/updateCart.php",
data: { productID: id, action: 'checkStock' }
}).done(function(data) {
// DO SOMETHING (A)
}).fail(function(data) {
// DO SOMETHING (B)
});
}

和(延迟对象方式)

function checkStock() {
return $.ajax(...);
}
checkStock().done(function(result) {
// DO SOMETHING (A)
}).fail(function() {
// DO SOMETHING (B)
});

这两个选项都只允许我在每次函数成功时做某事(A)。但我想检查库存情况并根据结果做不同的事情。

例如,在我的代码中的某个地方我这样做:

if(checkStock(productID) == 0) {
// do something (A)
}

在其他地方我做了一些完全不同的事情

if(checkStock(productID) > 5) {
// do something completely different
}

所以我的问题是:

  1. 延迟对象和 ajax 调用的简单 .fail/.success 回调有什么区别?
  2. 是否可以在不使ajax调用同步的情况下做我想做的事情?我想使用相同的 ajax 调用,并根据使用 ajax 调用的上下文以不同的方式使用结果。

最佳答案

使用 Promise 的目的是允许您将回调与原始操作分开(通过返回 Promise),并链接多个异步操作。

您需要将代码移至 promise 回调中:

checkStock(productId)
.then(function(result) {
if (result > 5) {
...
}
});

您可以在每次调用该函数时添加不同的 Promise 回调。

关于jquery ajax - 使用 promise /延迟对象来处理同一 ajax 调用的不同回调?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20684267/

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