首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >Promise.await()与顶级等待?

Promise.await()与顶级等待?
EN

Stack Overflow用户
提问于 2022-09-24 22:33:04
回答 3查看 88关注 0票数 -1

这样做是行不通的:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
function myFunction(myObject){
    let IM = await connectors.myModel.update({
        myField: true,
    }, {
        where: {id: myObject.id},
        returning: true,
    });
}

但这确实有效:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
function myFunction(myObject){
    let IM = Promise.await(connectors.myModel.update({
        myField: true,
    }, {
        where: {id: myObject.id},
        returning: true,
    }));
}

我知道您不能在await之外使用async functionPromise.await()和即将发布的node.js特性Top-Level await有什么区别?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2022-09-28 07:25:43

纤维与Promise.await

Meteor使用遮罩下的fibers (coroutines,在这里回购)来支持异步编程。这就是为什么您可以在服务器上使用Meteor同步风格的代码编写,尽管它本质上可能是异步的:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
const doc = MyCollection.findOne()
doc.someProp // yeay it's there without await

Promise.await也是如此,它使用当前的光纤作为执行环境。可以在Meteor方法中运行以下代码:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
Meteor.methods({
  test () {
    const someAsyncFn = async () => 'foo'
    const foo = Promise.await(someAsyncFn())
    return foo // 'foo'
  }
})

顶级等待和本机异步/等待

现在,艾米想知道为什么在2022年流星仍然不会使用真正的非同步/等待。很简单,这是一个10年前的框架,具有很高的稳定性和向后兼容性。迈向本机异步/等待的步骤需要丢弃光纤,而光纤本身就深深地内置在Meteor的核心中!

然而,关于迁移到本机异步/等待的讨论已经导致了它的开发:https://github.com/meteor/meteor/discussions/11505

在即将推出的Meteor2.8中,将有第一个本机异步/等待支持。在此和仍然是假发之后,顶层异步将可用。

我该怎么办?

现在,您应该开始缓慢地重写代码,以便在Meteor2.8开始时进行异步/等待,并尽量避免Promise.await,除非其他情况下不可能。

您已经可以编写服务器方法异步样式,而不会对行为产生那么大的影响:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
Meteor.methods({
  test: async function () {
    const someAsyncFn = async () => 'foo'
    const foo = await someAsyncFn()
    return foo // 'foo'
  }
})

就目前而言,您不能使用顶级等待,需要将其封装在一个生命块中:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
(async () => {

})()
  .then(res => {})
  .catch(e => {})
票数 2
EN

Stack Overflow用户

发布于 2022-09-24 22:38:49

看起来这是因为Meteor,我的构建工具,正在做一些很酷的承诺。

票数 -1
EN

Stack Overflow用户

发布于 2022-09-24 22:41:20

Promise.await接受一系列承诺,并在它们都解析时进行解析,并在解析时返回和数组结果。

顶级等待允许您调用等待,就好像整个全局代码都在异步块中一样。

您的代码可以工作,因为您没有等待Promise.await。你应该是,或者打电话给then

如果你想在顶层等待的话,把你的代码放在一个生命块中。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
;(async function() {
  await foo();
})();
票数 -2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/73842485

复制
相关文章
selenium 的显示等待与隐式等待
现在很多的网页都采用了 Ajax 技术,那么采用一般的静态爬虫技术会出现抓取不到页面的元素。比如歌曲的主页会有评论数量,一般评论数量是动态加载的。 所以这就涉及到selenium,支持各种浏览器,包括Chrome,Safari,Firefox 等主流界面式浏览器,如果你在这些浏览器里面安装一个 Selenium 的插件,那么便可以方便地实现Web界面的测试。
张凝可
2019/08/22
3.6K0
线程的通知与等待
Java中的Object类是所有类的父类,鉴于继承机制,Java把所有的类都需的方法放在了Object类里面,其中就包含要说的通知与等待。
YanL
2020/04/29
1.1K0
线程的通知与等待
Linux等待队列原理与实现
当进程要获取某些资源(例如从网卡读取数据)的时候,但资源并没有准备好(例如网卡还没接收到数据),这时候内核必须切换到其他进程运行,直到资源准备好再唤醒进程。
用户7686797
2020/08/25
3.3K0
PCL分享与等待你的加入
点云公众号开启了第二期的学习模式,由博主统筹学习任务,群成员自由选择选择的研究任务。半个月甚至一个月参与学习小伙伴的反馈给群主,并在微信交流群中进行学术交流,加强大家的阅读文献能力,并提高公众号的分享效果。
点云PCL博主
2019/07/30
5500
PCL分享与等待你的加入
MySQL锁等待与死锁问题分析
在 MySQL 运维过程中,锁等待和死锁问题是令各位 DBA 及开发同学非常头痛的事。出现此类问题会造成业务回滚、卡顿等故障,特别是业务繁忙的系统,出现死锁问题后影响会更严重。本篇文章我们一起来学习下什么是锁等待及死锁,出现此类问题又应该如何分析处理呢?
MySQL技术
2021/04/13
2.1K3
技术分享 | Web自动化之显式等待与隐式等待
等待就是当运行代码时,如果页面的渲染速度跟不上代码的运行速度,就需要人为的去限制代码执行的速度。
霍格沃兹测试开发
2022/04/27
9730
Selenium 元素checkbox元素操作与元素等待
检测百度页面搜索按钮是否存在,存在就输入关键词“自学网 Selenium” 然后点击搜索
清风穆云
2021/08/09
1.5K0
GPDB中Latch等待与唤醒实现机制
GreenPlum/PostgreSQL中有很多Latch以帮助多进程以及主线程与从线程之间协作。那么Latch是如何实现的呢?Latch可以在多进程之间以及主线程和从线程之间实现等待与唤醒,WaitEventSet是实现这项功能的关键结构。本文我们聊聊WaitEventSet的实现以及一个用法。
yzsDBA
2023/08/09
2280
GPDB中Latch等待与唤醒实现机制
​技术分享 | Web自动化之显式等待与隐式等待
等待就是当运行代码时,如果页面的渲染速度跟不上代码的运行速度,就需要人为的去限制代码执行的速度。
Hogwarts_测试
2022/04/27
8730
JUC - 线程中断与线程等待、唤醒(LockSupport)
​ 首先 ​ 一个线程不应该由其他线程来强制中断或停止,而是应该有线程自己自行停止,自己来决定自己的命运。 ​ 所以,Thread.stop, Thead.suspend, Thead.resumer都已经被废弃了。
鱼找水需要时间
2023/02/16
9200
JUC - 线程中断与线程等待、唤醒(LockSupport)
锁的等待与唤醒 -- ConditionObject 源码解析
此前在介绍 ReentrantLock 用法时,我们介绍了 ReentrantLock 与 Condition 的用法,类似于 Object 提供的 notify、notifyAll 方法来让线程进入等待与唤醒,那么这是如何实现的呢? 在介绍 AQS 源码时,我们提到,AQS 维护了两个队列 — 同步队列和等待队列,到现在为止,我们仅仅使用了 AQS 的同步队列,却从没有使用过 AQS 的等待队列,那么 AQS 等待队列究竟是如何实现的呢? 本篇日志我们就来介绍一下 ReentrantLock 的 Condition 的实现,他就是通过 AQS 的等待队列来实现的。
用户3147702
2022/06/27
3640
锁的等待与唤醒 -- ConditionObject 源码解析
学会等待
摘要总结:学会等待是一种能力——控制自己的能力。当内心特别热衷于某一个东西的时候,提醒一下自己很重要。
雷大亨
2017/12/29
1.4K0
Selenium4+Python3系列(六) - Selenium的三种等待,强制等待、隐式等待、显式等待
用一句通俗易懂的话就是:等待元素已被加载完全之后,再去定位该元素,就不会出现定位失败的报错了。
软件测试君
2022/12/05
2.9K0
Selenium4+Python3系列(六) - Selenium的三种等待,强制等待、隐式等待、显式等待
Java线程之间的通知与等待,详解!!
Java中的Object类是所有类的父类,鉴于继承机制,Java把所有的类都需的方法放在了Object类里面,其中就包含要说的通知与等待。
YanL
2020/04/26
1.8K0
Java线程之间的通知与等待,详解!!
等待与希望,.NET Core 的发展壮大
前几天微软推出了.net core 2.0, 尽管我现在使用的技术栈和微软已经没有一丝瓜葛, 但碰到微软放大招,心里还是瘙痒难当,忍不住偷偷摸摸的体验了一把。 谁叫我是通过微软系技术入的行呢,旧情难忘, 藕断丝连啊。就像你们的初恋情人一样, 怎么忘也忘不掉 .net core 1.X两年前就出来的, 我没去碰。 因为微软的重量级产品都一个尿性,第一个版本上线, 会有各不完善,使起来未必能趁我的手。况且,鬼知道这玩意会不会是个探路用的替死鬼,没长成就夭折也说不定。 像之前微软推出windows phone时,
用户1608022
2018/04/11
6050
3.4.2 单帧滑动窗口与停止等待协议
在停止等待协议中,源站发送单个帧后必须等待确认,在目的站的回答到达源站之前,源站不能发送其他的数据帧。从滑动窗口机制的角度看,停止等待协议相当于发送窗口和接受窗口的接受窗口大小均为1的滑动窗口协议。
week
2018/08/24
1.4K0
实战 MySQL 锁等待问题的定位与排查
在 MySQL 的实际使用中,常常会遇到一条 SQL 执行非常慢的情况,此前我们总结了一系列博客来排查相关的问题:
用户3147702
2022/06/27
2.8K0
实战 MySQL 锁等待问题的定位与排查
同步等待方法
function waitVar(key,varb, fun) { //等待指定变量,返回:-1:无数据,继续等待 -2:超时 1:成功。fun不支持参数 if (!cnt2[key]) { cnt2[key] = 1 } else { cnt2[key]++ } if (!varb || varb.length == 0) { if (cnt2[key] > 10) { //超时,由于都是异步操作,相互依赖的变量会同时判断,所以这个时间是最大
用户1075292
2018/01/23
1.6K0
等待者模式
等待者模式是通过对多个异步任务进行监听,当异步任务完成后触发未来发生的动作,在没有Promise这个模型的时候,其实就已经出现这样类似的技术方案,不同的只是没有定制为一个技术规范,等待者模式不属于一般定义的23种设计模式的范畴,而通常将其看作广义上的技巧型设计模式。
WindRunnerMax
2020/12/31
1.3K0
点击加载更多

相似问题

德诺顶级等待

24

反应“顶级等待实验不启用”和“等待”。

17

怎样才能做顶级等待?

3388

MeteorJS - Promise.await阻塞

11

顶级的等待有暂停吗?

23
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文