首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如果承诺还没有解决,那么之后的代码将如何运行呢?

如果承诺还没有解决,那么之后的代码将如何运行呢?
EN

Stack Overflow用户
提问于 2021-01-09 21:50:19
回答 3查看 1.3K关注 0票数 2

当我们使用链链接承诺的,并且承诺由然后返回时,那么不是一部分的代码如何在完成链之前运行链呢?代码如何跳过然后调用?难道不应该在运行"console.log“代码行之前执行所有调用吗?

以下是代码:

代码语言:javascript
运行
复制
Promise.resolve('333')
    .then((res)=>{console.log(res);return new Promise((resolve,reject)=> {setTimeout(function(){console.log('Timeout');resolve(1);},10000);console.log('Something');})})
    .then((res)=>{console.log(res);return new Promise((resolve,reject)=> {console.log('Something');resolve(2);})})    
    .then((res)=>{console.log(res);return new Promise((resolve,reject)=> {console.log('Something');resolve(3);})})
    .then((res)=>{console.log(res);return new Promise((resolve,reject)=> {console.log('Something');resolve(4);})})

console.log("When?")

在输出“什么时候?”是先印刷的..。现在我不知道怎么可能,因为第一个回调只在大约10秒内运行,然后回调将返回一个承诺,运行第二个,然后运行?也许我不明白然后的回调是如何与当时的函数“匹配”的。我认为然后实现看起来有点像:

代码语言:javascript
运行
复制
then(callback){
 let value= callback();
 if(value is promise){
     return value;
 }

 return Promise.resolve(value)
}
EN

Stack Overflow用户

发布于 2021-01-09 23:43:20

问得好。答案是事件循环,它评估JavaScript。简而言之,有微任务和宏任务。控制台日志是宏任务,承诺是微任务。事件循环首先处理宏任务,然后处理微任务。

有关更深入的解释,请参见:https://medium.com/javascript-in-plain-english/javascript-event-loop-y-promises-951ba6845899

问题中有一个部分的代码几乎是相同的。搜索console.log('start');来找到它。

票数 2
EN
查看全部 3 条回答
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/65647954

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档