gpt4 book ai didi

javascript - Promisejs 不准确,$getJSON 处于循环状态

转载 作者:行者123 更新时间:2023-12-02 16:55:05 24 4
gpt4 key购买 nike

我将promise.js与jQuery一起使用,但我不想使用$Deferred,因为许多人说它不准确,也不是Promises/A+的最佳实践。

var promises = [];
var myArray = //something

function readFile(){
$.getJSON( "yyy.com/readfile?callback", function( data ) {
console.log('Reading File');
promises.push(data)
});
}

function writeFile(){
$.getJSON( "yyy.com/writefile?callback", function( data ) {
console.log('Writing File');
promises.push(data)
});
}


for(var i, i < myArray.length, i ++) {
readFile();
writeFile();
}

Promise.all(promises).then(function(){
console.log('ALL DONE!');
// Do something
});

这就是结果

一切完成!
读取文件
写入文件
读取文件
写入文件
读取文件
写入文件


我的代码一定有问题。 “全部完成”应该记录在最后。有人可以指导我吗?

最佳答案

getJSON 调用返回的数据肯定不是 promise 。从 Promisejs 站点 ( https://www.promisejs.org/ ),您可以使用以下方法将 jQuery Promise 转换为 Promise 对象:

var jQueryPromise = $.ajax('/data.json');
var realPromise = Promise.resolve(jQueryPromise);

在您的示例中,这将类似于以下内容:

var promises = [];
var myArray = //something

function readFile(){
return Promise.resolve($.getJSON( "yyy.com/readfile?callback", function( data ) {
console.log('Reading File');
}));
}

function writeFile(){
return Promise.resolve($.getJSON( "yyy.com/writefile?callback", function( data ) {
console.log('Writing File');
}));
}


for(var i, i < myArray.length, i ++) {
promises.push(readFile());
promises.push(writeFile());
}

Promise.all(promises).then(function(){
console.log('ALL DONE!');
// Do something
});

评论更新:如果您希望按顺序处理您的 Promise,则应该使用 .then,例如:

for(var i, i < myArray.length, i ++) {
var operationPromise = readFile().then(function(readFileResponse){
return writeFile(readFileResponse);
});
promises.push(operationPromise);
}

关于javascript - Promisejs 不准确,$getJSON 处于循环状态,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26242143/

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