热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

是否可以在不分配JavaScript的情况下保证执行顺序?

如何解决《是否可以在不分配JavaScript的情况下保证执行顺序?》经验,为你挑选了2个好方法。

学科。我可以说下面的两段代码相等吗:

await someFunc() // no assignment here
doSomethingAfterSomeFunc()

和:

someFunc().then(() => 
  doSomethingAfterSomeFunc()
)

我尝试过,看起来它们是相等的,但是有一个疑问(例如,一些优化)



1> 小智..:

为了扩展Dan D的答案(因为我花了一段时间才弄清楚自己),我将讲一些关于执行流程的更多信息。确实,using await阻止了方法的流程,直到解决为止。假设我们有这个异步功能:

const someFunc = (str) => {
    return new Promise(resolve => {
        setTimeout(() => {
            console.log('resolving promise')
            resolve()
        }, 1500)
    })
}

因此,如果我们用await进行呼叫,如下所示:

console.log('before calling')
await someFunc()
console.log('after calling')

我们得到以下结果:

before calling
resolving promise
after calling

但是,当我们使用时.then()

console.log('before then')
someFunc().then(() => console.log('resolved'))
console.log('after then')

有时候是这样的:

before then
after then
resolving promise
resolved

这是因为.then()仅当前一个诺言完成时,才停止执行流程并在链中运行下一个函数。有时您希望这种情况发生,有时您不希望发生,有时并不重要。但是,如果您对此一无所知,可能需要一些时间才能解决。因此,我希望这个例子可以帮助您理解它。



2> Dan D..:

是的,它们是完全一样的,或多或少是语法糖。等待导致执行暂停,直到Promise解决了等待。

有关更多信息,请参见Javascript async一节中的重写诺言链。


推荐阅读
author-avatar
兰州老头_337
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有