gpt4 book ai didi

javascript - Async/Await - 如何在递归 Ajax 函数中实现 Javascript Async-Await?

转载 作者:行者123 更新时间:2023-11-30 06:49:58 24 4
gpt4 key购买 nike

我有两个功能。

我在 syncTrendyolOFFStocks() 函数中调用了多次 trendyolStocksUpdate() 函数。

我使用了 async/awaittrendyolStocksUpdate() 函数没有按顺序调用。它同时运行。

我的代码有什么问题?

下面是两个函数:

async function syncTrendyolOFFStocks(){

//This function sends "out of stock products" one by one
//to trendyolStocksUpdate function, so they their quantity will be initalized to 0
//For example, T-Shirt XL Yellow, and T-Shirt XXL Red are sent.

for(var product in all){
var colors = all[product];
for(var singleColor in colors[0]){
var size = colors[0][singleColor];
for(var index in size){
var singleSize = size[index];
await trendyolStocksUpdate(0,"",allProducts[product],singleSize,singleColor,0);
}
}
}
}


async function trendyolStocksUpdate(stockCount,price,product,size,color,rowCount){

//This function sends given Product Variation to trendyolUpdateStock.php with jQuery.ajax
//recursively. 1000 product's quantity are equalized to 0, once at a time.

dataObj = {
rowCount: rowCount,
product: product,
size:size,
color:color,
stockCount: stockCount,
};

if(price != ""){
dataObj["price"] = price;
}

await jQuery.ajax({
type: "POST",
url: "/wp-content/plugins/promc/templates/trendyolUpdateStock.php",
dataType: 'json',
data: dataObj,
success: function(data)
{

if(data.numberOfRows == 1000)
{
rowCount = rowCount + 1000;
trendyolStocksUpdate(stockCount,price,product,size,color,rowCount);
}
else
{
jQuery("#trendyolMonitor").append("<h3>Completed!</h3>");
rowCount = 0;
}
},
error: function(XMLHttpRequest, textStatus, errorThrown)
{
}
});
}

最佳答案

当您在成功函数内调用 trendyolStocksUpdate(stockCount,price,product,size,color,rowCount); 时,它不会被等待。所以函数会在递归调用完成之前返回。

您可以在等待的 ajax 调用之后放置该逻辑,而不是使用成功函数。

async function trendyolStocksUpdate(stockCount,price,product,size,color,rowCount){
//This function sends given Product Variation to trendyolUpdateStock.php with jQuery.ajax
//recursively. 1000 product's quantity are equalized to 0, once at a time.

dataObj = {
rowCount: rowCount,
product: product,
size:size,
color:color,
stockCount: stockCount,
};

if(price != ""){
dataObj["price"] = price;
}

try {
const data = await jQuery.ajax({
type: "POST",
url: "/wp-content/plugins/promc/templates/trendyolUpdateStock.php",
dataType: 'json',
data: dataObj
});
if(data.numberOfRows == 1000)
{
rowCount = rowCount + 1000;
await trendyolStocksUpdate(stockCount,price,product,size,color,rowCount);
}
else
{
jQuery("#trendyolMonitor").append("<h3>Completed!</h3>");
rowCount = 0;
}
} catch (error) {
// Error stuff…
}
}

关于javascript - Async/Await - 如何在递归 Ajax 函数中实现 Javascript Async-Await?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59219048/

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