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

推荐订阅源

J
Java Code Geeks
Hugging Face - Blog
Hugging Face - Blog
博客园_首页
爱范儿
爱范儿
罗磊的独立博客
美团技术团队
Jina AI
Jina AI
量子位
奇客Solidot–传递最新科技情报
奇客Solidot–传递最新科技情报
酷 壳 – CoolShell
酷 壳 – CoolShell
有赞技术团队
有赞技术团队
V
V2EX
阮一峰的网络日志
阮一峰的网络日志
小众软件
小众软件
IT之家
IT之家
雷峰网
雷峰网
freeCodeCamp Programming Tutorials: Python, JavaScript, Git & More
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
博客园 - 司徒正美
大猫的无限游戏
大猫的无限游戏
博客园 - 聂微东
月光博客
月光博客
人人都是产品经理
人人都是产品经理
博客园 - 三生石上(FineUI控件)

博客园 - 北山秋叶

macos 上的 zsh 启动问题记录 Keychron Max 键盘改键指南 Github 命令在 命令行 中访问特别慢的解决方法 ai 随想 影响记忆 monorepo(多包)管理中, 引入的 css 文件丢失的问题 (或者说package.json中的 sideEffects 的探索) 浏览器插件 Obsidian web 与 Obsidian 插件 local rest api 结合配置过程记录 package.json中的版本号 mac 下检测网络状态的命令 git clone 需要用户名密码的一个小问题 怎么才能写一个好代码 yeoman编写自己的脚手架 有趣的二分 ngix反向代理-之反向 redux和flux究竟有什么不同, 说点自己的理解 npm发包记录 由一个聚焦-focus-事件异常跟踪引起的总结 git查看分支的几个方法 test-your-mind-快速测试自己的代码 给Promise在外部增加断点 js中调试技巧-打印日志信息
await和promise结合使用的问题
北山秋叶 · 2020-07-18 · via 博客园 - 北山秋叶

await和promise结合使用的问题

由于目前(2020)的情况, 我们写东西的时候, 通过 babel 的转译(transpile), await 和 async 和 promise 经常会有一起的情况.

工作中直接跟踪代码, 发现有一些序列上的问题需要注意

比如, 多个promise一起并行的情况


new Promise(rel=>rel('ok1')).then(d=>console.log(d)).then(d=>console.log(1));
new Promise(rel=>rel('ok2')).then(d=>console.log(d)).then(d=>console.log(2));

这种情况下, 我们的执行, 并不是 首先执行完第一个 promise, 而是按照 微队列的进入顺序, 依次进行执行

执行结果

'ok1'
'ok2'
1
2

但是如果我们使用了 await 的时候, 情况确有些差别


async function withawait(){
    await new Promise(rel=>rel('ok1')).then(d=>console.log(d)).then(d=>console.log(1));

    /*await //可以没有*/ new Promise(rel=>rel('ok2')).then(d=>console.log(d)).then(d=>console.log(2));
}

withawait()

执行结果

'ok1'
1
'ok2'
3

其实我们从语义上去理解, await 就是要让后边等待我后边的异步队列进行执行完成, .then 也是返回的异步队列.

默认的情况下, 我们的 async 和 await 修饰后的方法是直接返回一个 promise 的.

比如

async function retPromise(){
    return await 2;
}

retPromise() instanceof Promise // true

总结: js 是快速发展的, 队列,异步也是js的核心. 需要对其中有一些基本的理解才能够更好的运用.