gpt4 book ai didi

javascript - 我如何知道哪个 Promise 将首先解决?

转载 作者:行者123 更新时间:2023-11-28 12:12:25 26 4
gpt4 key购买 nike

我正在研究一个片段,我特意将 Promise.resolve(c) 放在 Promise.resolve(a) 之前,但我是注意到底部 Promise.all(...)true 值首先被记录。

const https = require('https');

function getData(substr) {
let url = ``;
return new Promise((resolve, reject) => {
try {
https.get(url, res => {
let s = '';
res.on('data', (d) => {
s += d
});

res.on('end', () => {
let data = JSON.parse(s);
resolve(data);
})
})
} catch (e) {
reject(e);
}
})
}

let a = getData('spiderman');

let b;

let c = getData('superman');

Promise.resolve(c)
.then(value => console.log(value));

Promise.resolve(a)
.then(value => b = value);

Promise.all([a]).then(values => console.log(values[0] === b));

有什么解释可以解释为什么会出现这种情况吗?我认为,由于 Promise.resolve(c) 首先出现,因此 Promise c 将首先解析并记录。或者除了使用回调之外没有办法真正依赖日志的顺序?避免此类问题的最佳做法是什么?

最佳答案

这些是异步调用,使用传递给 then 的提供的函数完成解析。

没有办法强制其中之一先完成,如果您需要,您应该同步运行它们。

当您调用 .then() 时,仅在函数完成时调用,而不是在调用 .resolve 时调用。

关于javascript - 我如何知道哪个 Promise 将首先解决?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58274229/

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