我有下面这段代码,理论应该先输出“11111111”在输出“cccc”。
https://imgur.com/a/YuHi7NC.png
实际在控制台却不是这样的。
https://imgur.com/u98fTNa.png
哪位大佬能分享下这是为什么吗?
https://imgur.com/a/YuHi7NC.png
实际在控制台却不是这样的。
https://imgur.com/u98fTNa.png
哪位大佬能分享下这是为什么吗?
|
1
|
|
2
Promise 构造函数传入的 executor 函数会被立即执行。
|
|
pixcaiDec 6, 2022
3
2 楼说的对
|
|
churchillDec 6, 2022
4
谁的理论呀?
ECMAScript 的理论是立即执行 https://tc39.es/ecma262/multipage/control-abstraction-objects.html#sec-promise-executor |
|
johnliDec 6, 2022
5
2 楼说的对,所以依赖的顺序是 resolve 的结果,不是中间过程
|
|
6
@timethinker #2 也就是在需要的时候构建,而不是提交构建放哪里?
|
|
7
@timethinker #2 而不是提前构建好。
|
|
8
|
|
9
如果是“立即执行” ,Promise.all 的意义是啥?结果都产生了。
|
|
timethinkerDec 6, 2022
10
Promise != Lazy ,你需要的更像是 Lazy
|
|
11
刚 Google 到的一篇文章: https://tusharf5.com/posts/js-promises-eager-not-lazy/
|
|
12
@timethinker #11 学习了,非常感谢,我现在理解了。
|
|
jadehareDec 6, 2022
13
@w292614191 #9
let getSys = function(resolve){ console.log("111") resolve(); } ruleArr.push(getSys); Promise.all(ruleArr.map(a=>new Promise(a))); |
|
YeenDec 6, 2022
14
你传给 promise 的异步回调本身并不能保证同步顺序。
这个问题简化一下更好理解。你构造两个 promise ,都是 http 请求。你并不能保证哪个请求先返回。 如果需要同步,要么在 then 串行起来;要么 await 同步。 |
|
YeenDec 6, 2022
15
@w292614191 立即执行不等于立即有结果。比如网络请求
|
|
okakuyangDec 7, 2022
16
可以在 for of 里用 awit 顺序执行
|
|
ZoeeoZDec 7, 2022
17
promise.all 我遇到过最迷幻的一次问题是: 里边的两个(校验表单的)函数调换一下顺序(比如 B,A)就永远走失败,但不调换(A,B)就正常,我调了 N 久才发现是这俩顺序的问题
|