惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

酷 壳 – CoolShell
酷 壳 – CoolShell
T
Threatpost
Latest news
Latest news
N
News | PayPal Newsroom
Threat Intelligence Blog | Flashpoint
Threat Intelligence Blog | Flashpoint
Help Net Security
Help Net Security
D
Darknet – Hacking Tools, Hacker News & Cyber Security
AI
AI
Simon Willison's Weblog
Simon Willison's Weblog
TaoSecurity Blog
TaoSecurity Blog
The Last Watchdog
The Last Watchdog
L
LINUX DO - 热门话题
Google DeepMind News
Google DeepMind News
T
Threat Research - Cisco Blogs
O
OpenAI News
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
T
The Exploit Database - CXSecurity.com
NISL@THU
NISL@THU
Application and Cybersecurity Blog
Application and Cybersecurity Blog
S
Securelist
小众软件
小众软件
cs.CL updates on arXiv.org
cs.CL updates on arXiv.org
Martin Fowler
Martin Fowler
S
SegmentFault 最新的问题
Cisco Talos Blog
Cisco Talos Blog
云风的 BLOG
云风的 BLOG
AWS News Blog
AWS News Blog
GbyAI
GbyAI
N
News and Events Feed by Topic
cs.CV updates on arXiv.org
cs.CV updates on arXiv.org
美团技术团队
Engineering at Meta
Engineering at Meta
A
About on SuperTechFans
博客园 - 三生石上(FineUI控件)
S
Schneier on Security
博客园 - 聂微东
V2EX - 技术
V2EX - 技术
T
Troy Hunt's Blog
SecWiki News
SecWiki News
S
Secure Thoughts
B
Blog RSS Feed
Hugging Face - Blog
Hugging Face - Blog
WordPress大学
WordPress大学
腾讯CDC
H
Heimdal Security Blog
Exploit-DB.com RSS Feed
Exploit-DB.com RSS Feed
Apple Machine Learning Research
Apple Machine Learning Research
月光博客
月光博客
www.infosecurity-magazine.com
www.infosecurity-magazine.com
P
Privacy International News Feed

博客园 - sonicit

再写Javascript闭包 后台数据缓存的一点心得 C# 使用 Newtonsoft.Json 对DataTable转换中文乱码问题的解决 Vue 数据双向绑定的误区 关于jqGrid中GridUnload方法的困惑 Javascript异步编程的4种方法 SQLServer 获得所有表结构(包括表名及字段) ACE代码编辑器,代码提示,添加自定义数据 利用闭包向post回调函数传参数 在seajs中使用require加载静态文件的问题 jqGrid标题行与第一行之间有很大空白的问题解决。 关于bootstrapValidator提交问题的解决 心得(一) 使用心得(一) MSSQL获得表的字段名称及其参数 Controller_Abstract的改造 QeePHP View视图的默认变量与新增变量 Delphi 的内存操作函数(5): 复制内存 Windows 7 安装VS2008 SP1 失败
关于JS Pormise的认识
sonicit · 2021-11-01 · via 博客园 - sonicit

先看一下代码 

let runPromise = () => {
    return Promise.resolve().then(() => {
        console.log(1)
    }).then(res => {
        console.log(2)
    }).then(() => {
        console.log(3)
    })
}

执行的结果

 也就是每个then后的方法不需要 return 就会按照顺序执行

let runPromise = () => {
    return Promise.resolve().then(() => {
        console.log(1)
        return {a: 1}
    }).then(res => {
        console.log(2, res)
    }).then(() => {
        console.log(3)
    })
}

执行结果

 如果有 return 则下一个then的方法回调中可以获得参数,当然可以必要时 return Promise.reject({message: ''}) 退出下面所有的 then

来看另一个案例

 1 let runPromise = () => {
 2     return Promise.resolve().then(() => {
 3         return new Promise((resolve, reject) => {
 4             console.log(1)
 5         })
 6     }).then(res => {
 7         console.log(2)
 8     }).then(() => {
 9         console.log(3)
10     })
11 }

执行结果

 一直处于pending状态

如果要向下执行代码修改为

 1 let runPromise = () => {
 2     return Promise.resolve().then(() => {
 3         return new Promise((resolve, reject) => {
 4             console.log(1)
 5             resolve()
 6         })
 7     }).then(res => {
 8         console.log(2)
 9     }).then(() => {
10         console.log(3)
11     })
12 }

所以,Promise的混合使用,需要根据不同的场景去优化。