gpt4 book ai didi

Javascript Promise 链乱序执行

转载 作者:太空宇宙 更新时间:2023-11-03 23:03:49 25 4
gpt4 key购买 nike

我使用 Javascript 的 native Promise 制作了 fs.readFile 的“promisified”版本,它解析 JSON 文件并在解析时返回对象。

function readFileAsync(file, options) {
return new Promise(function (resolve, reject) {
fs.readFile(file, options, function(err, data) {
if (err) {
reject(err);
} else {
var object = JSON.parse(data);
resolve(object);
}
});
});
}

我首先尝试自己链接 promise ,但由于某种原因,首先记录 promise 1 中的 districts.variable1,然后在 promise 3 中调用 comparePersonalities,这给出了错误,因为 user 仍未定义,然后 user.variable2 从 Promise 2 中记录。

var user, district;
readFileAsync(file1, 'utf8').then(function (data) {
districts = data;
console.log(districts.variable1);
}).then(readFileAsync(file2, 'utf8').then(function (data) {
user = data;
console.log(user.variable2);
})).then(function (result) {
comparePersonalities(districts, user);
}).catch(function (e) {
console.log(e);
});

我还尝试了使用 Promise.all 的替代方法,但这仍然会导致排序不正确并且 comparePersonalities 失败。

Promise.all([readFileAsync(file1), readFileAsync(file2)]).then(function (first, second) {
districts = first;
user = second;
comparePersonalities(districts, user);
});

当在 promise 中记录已解析的对象时,一切似乎都运行良好,我不明白为什么一切最终都被初始化,但最后一个 promise 在第二个 promise 完成之前运行。我在链式 Promise 和 Promise.all 中做错了什么?

最佳答案

Promise.all 更适合您的用例。您在回调中犯了一个错误:外部 Promise 使用结果数组(与内部 Promise 的顺序相同)进行解析,因此 then(function (first, secondary) {...}) 不正确。尝试这样的事情

Promise.all([
readFileAsync(file1, 'utf8'),
readFileAsync(file2, 'utf8')
]).then(function (results) {
// note that "results" is an array of two values
var districts = results[0];
var user = results[1];
comparePersonalities(districts, user);
});

关于Javascript Promise 链乱序执行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41112095/

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