一个原因是:同步和异步共存的情况无法保证程序逻辑的一致性,假设按照then可能同步可能异步的设计,以下代码就存在一些问题:letcache=null;functiongetValue(){if(cache){returnPromise.resolve(cache);//存在cache,这里...
《你不知道的JavaScript》解释过这个问题:下面说说我阅读后的理解:因为then总是返回Promise,xxx.then(a=>a)的效果实际上是returnnewPromise(resolve=>resolve(a)),这个过程由引擎隐式完成。而Promise是一个Job,所...
give
past
put
follow
any
little
would
make
做为在没看过标准的情况下就完整实现过Promise的渣渣,来强答一发这里题主的重点不在是不是microtask,而是问为什么要异步执行回调虽然标准里也是这么说的,但并没有解释原因,而我在最初实现的时候,是完全...
手机强答一发。正常顺序是13420首先,浏览器内部会维护多个stack的,抛开callstack,其中有microtasks和tasks(或叫macrotask)。每=一=个eventloop会从macrotasks取一个task来执行,执行结束。按顺序调用microtask里...
贺老说的正确。补充一下,PromiseJob以及JobQueue是ES中的说法,而macroTask和microTask是浏览器中的概念,包括setTimeout也是宿主环境提供的。因此输出43是ECMAScript和浏览器两种规范共同约束的结果。PromiseJob对应...
then后面的方法可以简单理解为原来的ajaxsuccess回调看下promise的相关文档...
楼上解释的没错,如果用显示的queueMicrotask函数来添加microtask,你会更容易理解queueMicrotask(()=>{console.log(1)queueMicrotask(()=>{console.log(2)})})queueMicrotask(()=>{console.log(3)queueMicrotask(()=>{console.log(...
以下用输出的1234指代每=一=个then同步执行resolve,入队列13执行1,入队列2,此时队列为32执行3,入队列4,此时队列为24执行2,此时队列为4执行4,队列为空关键在于,上一个then执行后,下一个链式的then才会被加入micr...
要说简单,async是最简单的,只是在callback上加了一些语法糖而已。在不是很复杂的用例下够用了,前提是你已经习惯了callback风格的写法。then.js上手也是比较简单的,因为也是基于callback和continuationpassing,并...
First,Ichosethenjsasthefirstpostion,butaproblemencountered,Ifoundtherewasnowaytodiscussortalk,soIhadtogiveitup.replaceditwithoriginalpromisejs....
不谢邀。请自行做面试题。认真做了之后还有搞不明白的地方,可写清楚具体疑惑,再行补充提问。...
IE并没有Promise的原生实现。你看到的结果是某个polyfill的结果吧(我估计你是用babel转译的,大概是corejs)。所以执行顺序有问题是这个库的问题。此外,正常顺序应该是13420。因为setTimeout默认最小是4ms,所以...
用函数把代码分割开,不要混在一起。如果一个函数里有两个newPromise(),说明你很有可能做错了。constreadFileAsURL=file=>newPromise((resolve,reject)=>{//其实我觉得这里应该用URL.createObjectURL()constfr=new...
不知道我的理解对不对你这边似乎是像分别判断fileReader读取文件的成功与否和img加载成功与否只要有一项没有加载成功就reject但是你可能忽略了一点,Promise的状态是不可逆的,也就是说你resolve或者rej...
[你是我爱人]...