首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

为什么在等待承诺后没有设置我的变量

在等待承诺后没有设置变量可能是因为以下几个原因:

  1. 异步操作:在等待承诺(Promise)的过程中,可能涉及到异步操作,例如网络请求或者文件读取等。在这种情况下,代码会继续执行后续的逻辑,而不会等待异步操作完成。如果没有正确处理异步操作的结果,就无法设置变量。
  2. 作用域问题:变量的作用域可能导致无法在等待承诺后设置变量。如果变量的定义在等待承诺的回调函数之外,那么在回调函数中设置的变量值无法在外部访问到。
  3. 承诺未被解决或拒绝:如果等待的承诺最终未被解决或被拒绝,那么就无法设置变量。这可能是由于网络错误、请求超时或者其他错误导致的。

为了解决这个问题,可以采取以下几种方法:

  1. 使用异步/等待(async/await):使用async/await关键字可以简化异步操作的处理,使代码在等待承诺时暂停执行,直到承诺被解决或拒绝。这样可以确保在承诺解决后设置变量。
  2. 在承诺的回调函数中设置变量:如果变量的作用域允许,在承诺的回调函数中设置变量的值,以确保在承诺解决后可以访问到正确的值。
  3. 错误处理:在等待承诺时,需要正确处理可能发生的错误情况,例如网络错误或请求超时。可以使用try/catch语句块来捕获并处理这些错误,以避免承诺未被解决或拒绝而无法设置变量。

总结起来,等待承诺后没有设置变量可能是由于异步操作、作用域问题或承诺未被解决或拒绝等原因导致的。为了解决这个问题,可以使用异步/等待、在回调函数中设置变量或正确处理错误等方法。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

解决etcporfile下设置环境变量以后zsh没有起效问题

问题1: 今天添加java环境变量时候,/etc/profile添加了环境变量,因为使用是zsh,source /etc/profile以后,zsh主题和插件都没有了,java -version...以后出现旗标信息,以为可以了,但是没有主题就很难受,重启shell。...java -version提示没有此命令,懵~ 推测问题原因: 由于终端中source /etc/profile只是让本shell进程执行,相当于只是本shell执行了环境变量,所以重启之后依旧失效...所以推测还有一种方法,/etc/zsh/zprofile下面export相应环境变量. 问题2: 在后面的使用中,发现切换到root用户时候,java环境变量又不生效了。...解决办法: /root/.bashrc文件尾部添加: source /etc/profile ok,完美解决

4K10

异步与回调函数作用域链

同步任务是那些没有被引擎挂起、主线程上排队执行任务。只有前一个任务执行完毕,才能执行一个任务。 异步任务是那些被引擎放在一边,不进入主线程、而进入任务队列任务。...异步操作 异步操作模式--回调函数 有这样一个问题: 想先定个闹钟,三秒钟闹钟就会响.这时候再起床....所以$.ajax()是异步,我们拿到只是一个承诺(Promise),承诺会执行,并承诺会在拿到结果执行什么什么什么 如下: ?...下面带一个小作品里一部分代码,一直嵌套回调函数. ?...,先从自己内部找变量 如果找不到,再从创建当前函数所在作用域去找, 以此往上 注意找变量的当前状态

1.8K40

随机数与区块链

但我可以告诉你,这两个问题最佳解决方案很可能还没有找到。事实上,这些问题真的很重要,用著名唐纳德的话说就是:”随机数不应该用随机选择方法生成“。 为什么这么难?嗯,这是由于随机数性质。...为 Solidity 智能合约生成随机数 现在,大多数人都知道,当人们试图智能合约中生成随机数时,会面临一个问题。遗憾没有一个万能解决方案,让来介绍一下现有的解决方案。...简短失败方案回顾 ? 我们简单看一下常见方案,以及它们为什么不好。在这里就不详细描述,因为已经有其他文章描述很好了。 1. 使用区块变量作为随机数 block.number: 区块号。...可以用一个传递变量和私有存储种子作为输入进行计算由此产生随机数。然而,这种方法并没有考虑到不可能在公共网络内存储私有数据。...当然,每个节点只有收到所有其他节点承诺,才开始揭示阶段。程序是这样: 所有参与者,P1...Pn,每人产生一个秘密随机值Vi。 Pi计算其秘密随机值承诺哈希值:Ci = H(Vi)。

78610

AsyncAwait 语法简介

相反,同步代码一次只运行一个操作,没有能力同时发送多个请求。异步编程是我们后端技术核心,因为它允许我们指定异步代码“网”,以捕捉传入或传出请求,并随时发送多个请求。...使用承诺设置,我们需要在`.then`块之后使用`.catch`块来处理可能出现任何错误,否则我们将无法获取任何信息来调试我们代码。...承诺美妙之处在于它们始终存在,等待我们应用程序或用户使用它们来处理幕后魔法。总之,传统承诺链存在一些问题,特别是不易读。异步代码可能庞大、令人生畏,难以阅读或理解。...随之而来是在这些块中使用`await`关键字,告诉我们程序等待承诺解析时将其分配给一个变量,这也消除了对多个承诺使用`Promise.all`必要。...总的来说,两者之间有一些细微差别,但学会它们可以节省潜在时间浪费和可能带来巨大承诺链头痛。正在参与2023腾讯技术创作特训营第三期有奖征文,组队打卡瓜分大奖!

19210

JavaScript中Promises

你有没有JavaScript中遇到过promises并想知道它们是什么?它们为什么会被称为promises呢?它们是否和你以任何方式对另一个人做出承诺有关呢?...建议你回到关于callbacks这篇文章了解再回来。 通过类比会更好地解析JavaScript promise概念,所以我们来这样做(类比),使其概念更加清晰。...这是约定好JavaScript中,promise工作方式和现实生活中承诺一样。...JavaScript中,我们说承诺(promise)正在等待中(pending)。如果你console.log一个promise对象,就可以验证这点。...打印jeffBuysCake表明承诺正在等待中。 当我们稍后一起构建jeffBuysCake时,你将能够自己证明此console.log语句。 与Jeff交谈之后,你开始计划下一步。

79220

50道JavaScript详解面试题,你需要了解一下

在这种情况下,由于我们两次定义了相同变量,因此,会在控制台上引发错误。 但是,如果我们使用var定义相同变量,则控制台将返回50 。同样,使用const定义变量时,我们将得到相同错误。...答案,是B,因为异步函数JavaScript中返回Promises 。 8、等待关键字会阻止应用程序中所有JavaScript代码执行,直到返回等待Promises?...12、满足所有承诺,以下哪个解决方案可以解决? 答案是C,当我们需要等待执行直到所有的都被解决时,Promise.all()会非常有用。 13、控制台输出是什么,为什么?...20、创建字符串,我们可以修改它吗? 不可以,因为字符串JavaScript中是不可变,指向字符串变量可以分配给另一个字符串。 21、承诺链中嵌套捕获可以捕获承诺链中向上抛出错误吗?...控制台输出将为10和5,因为该函数Promise中没有异步内容,并且Promise同步解析。 32、浏览器下一次重画显示内容之前,哪个函数会执行指定代码块?

3.5K40

【译】JavaScript中Promises

你有没有JavaScript中遇到过promises并想知道它们是什么?它们为什么会被称为promises呢?它们是否和你以任何方式对另一个人做出承诺有关呢?...建议你回到关于callbacks这篇文章了解再回来。 通过类比会更好地解析JavaScript promise概念,所以我们来这样做(类比),使其概念更加清晰。...这是约定好JavaScript中,promise工作方式和现实生活中承诺一样。...JavaScript中,我们说承诺(promise)正在等待中(pending)。如果你console.log一个promise对象,就可以验证这点。...(该死,Jeff!)。如果发生这种情况,我们会说承诺被拒绝(rejected)了。 当承诺被拒绝了,你可以.catch调用中执行应急计划。

1.4K20

JavaScript是如何工作:事件循环和异步编程崛起+ 5种使用 asyncawait 更好地编码方式!

单线程环境中编程缺陷以及如何解决这些缺陷来构建健壮JavaScript UI。按照惯例,本文最后,分享5个如何使用async/ wait编写更简洁代码技巧。 为什么单线程是一个限制?...你可能知道标准 Ajax 请求不是同步完成,这说明代码执行时 Ajax(..) 函数还没有返回任何值来分配给变量 response。 一种等待异步函数返回结果简单方式就是 回调函数: ?...例如,当 JavaScript 程序发出 Ajax 请求从服务器获取一些数据时,函数(“回调”)中设置“response”代码,JS引擎告诉宿主环境:"现在要推迟执行,但当完成那个网络请求时,会返回一些数据...但是,如果队列有其他事件在前面添加回调刚必须等待前后执行完执行myCallback。...当 sum(…) 操作完成时,sum 传入两个 Promise 都执行完,可以打印出来了。这里隐藏了sum(…)中等待x和y未来值逻辑。

3.1K20

想用好分布式框架,先学会Paxos算法吧

需要注意是,Paxos 是典型基于操作转移模型(状态机)而非状态转移模型来设计算法,所以这里设置值”不要类比成程序中变量赋值操作,而应该类比成日志记录操作。...因此,对同一个变量并发修改,必须先加锁操作,不能让 A、B 请求被交替处理。这,可以说是程序设计基本常识了 但是,分布式环境下,还要同时考虑到分布式系统内,可能在任何时刻出现通讯故障。...如果一个节点在取得锁之后、释放锁之前发生崩溃失联,就会导致整个操作被无限期等待所阻塞。...一个应答是指:不违背以前作出承诺前提下,回复已经批准过提案中 ID 最大那个提案所设定值和提案 ID,如果该值从来没有被任何提案设定过,则返回空值。...整个过程时序图如下所示: 1 说人话就是 小帅是提案节点,小美们是决策节点,小黑是记录节点,(有一个前提,每个承诺都不违背以前承诺,在这个前提下只接受提案ID最大消息) 小帅发广播说要把a值改成

31430

jvm垃圾回收之引用计数算法和可达性分析算法(判断对象是否存活算法

,且效率很高,但是无法解决循环引用问题,因此java中没有采用此算法(但是Python中采用是此算法) 看下图代码:来分析一下为什么会产生循环引用问题,且注意看图中注释 ?...以下是参考:深入理解jvm一书中:对象生存还是死亡 即使可达性分析算法中不可达对象,也并非是“非死不可”,这时候它们暂时处于“缓刑”阶段,要真正宣告一个对象死亡,至少要经历两次标记过程:如果对象进行可达性分析发现没有与...这里所谓“执行”是指虚拟机会触发这个方法,但并不承诺等待它运行结束,这样做原因是如果一个对象finalizeO 方法中执行缓慢,或者发生了死循环(更极端情况),将很可能会导致F-Queue队列中其他对象永久处于等待...,譬如把自己(this 关键字) 赋值给某个类变量或者对象成员变量,那第二次标记时它将被移除出“即将回收”集合: 如果对象这时候还没有逃脱,那基本上它就真的被回收了。...1.可达性分析没有发现引用链 2.查看对象是否有finalize方法,如果有重写且方法内完成自救[比如再建立引用],还是可以抢救一下,注意这边一个类finalize只执行一次,这就会出现一样代码第一次自救成功第二次失败情况

2.4K20

前端-ES6中promise实现原理

好在计算机不是人,不是人,不是人,····正因为不是人,所以它许下承诺,它就一定会给你一个结果。 等待承诺实现过程中很漫长,所以你可以做一些其它事情,没必要老是堵在这一条道上,也就是异步。...打个比方,你打电话给饭店老板叫了个外卖,老板告诉你,10分钟后送过去,也就是说老板给了你一个承诺,于是你等啊等,这中间又去上了个厕所,玩了会手机······,这就是异步,老板给承诺没有妨碍你干其它事情...onResolved,那么接下来我们应该考虑实例化时候,还有什么事情要做,then方法回调函数中我们希望得到promise值,这个值是fn函数调用后被resolve函数运算得到,最终要在...又扯远了·····仔细看下除了handle我们还引入两个变量value和deferred,先从最简单来:value作用很简单,构造函数内它是一个全局变量,起到一个桥梁作用,就是为了handle函数内能取到...在这里请默念一百遍handle,defer,再接着往下看,保证他们会让你困惑。 回到最初,为什么要用promise,想想回调地狱,再想想promise是怎么解决,那就是then方法链式调用。

62920

怎么理解JS Promise

由于昨天发了一篇关于setTimeout 文章,里面提到了 Promise ,那篇文章里没有解释Promise用法和含义,因为昨天还没太懂Promise,所以没有在那篇文章继续解释Promise...,没有给小花送衣服,没有实现到承诺,小丽给小花Promise状态就从pending变成了rejected。...当小花她知道小丽给她送衣服承诺,她心中就会安排这: “得到衣服要买一双新鞋子搭配这衣服”,或者如果小丽没有送衣服给小花,小花就会生气,所以如果有了promise,我们就会用到 .then()...如果小花得到了衣服她就有了第二个想法,即可以理解为另外一个承诺Promise:“要买双新鞋子搭配衣服”。...总结起来js引擎对程序执行顺序是:1。先执行同步任务程序 2。 执行异步任务里微任务 3。所有微任务都执行完了就执行异步宏任务,但这里是一个一个宏任务去执行,不是一下子执行完。

11.7K30

RxJS 快速入门

同步环境下,两者各有优缺点,甚至有时候过程式会更简明一些,但在异步环境下(最典型场景是一个 Ajax 请求完成紧接着执行另一个 Ajax 请求),由于无法控制执行和完成顺序,所以就无法使用传统过程式写法...承诺,英文是 Promise [ˈprɑmɪs],它基本思想是借助一个代表回执变量来把回调地狱拍平。 我们以购物为例来看看日常生活中承诺。...你去电商平台下单,并付款 平台会给你一个订单号,这个订单号本质上是一个回执,代表商家做出了“稍后将给你发货”承诺 商家发货给你,在这个过程中你不用等待(异步) 过一段时间,快递到了 你签收(回调函数被调用...retry 操作符就是负责失败时自动发起重试,它可以接受一个参数,用来指定最大重试次数。 这里为什么一直强调失败时重试呢?因为还有一个操作符负责成功时重试。 repeat - 成功时重试 ?...比如在 Angular 中,如果你订阅了无尽流,那么就需要把订阅凭证保存在私有变量里,并且 ngOnDestroy 回调中调用它 unsubscribe 方法。

1.9K20

手写系列-这一次,彻底搞懂 Promise

当我麦当劳点一份汉堡套餐,收银员会给我一张收据,这个收据就是 Promise,代表已经付过钱了,麦当劳会为做一个汉堡套餐承诺要通过收据来取这个汉堡套餐。...那么这个买汉堡得到承诺会有以下 3 种状态: 等待状态:刚下单,汉堡还没做好,这时可以等待汉堡时,同时做其他事情; 成功状态:汉堡做好了,通知取餐; 失败状态:发现卖完了,通知退款; 需要注意是...,状态修改是不可逆,当汉堡做好了,承诺兑现了,就不能再回到等待状态了。...多次调用 then then 可以同一个承诺上多次调用。...原因: new promise 时,promise2 还没有完成初始化。

18530

手写系列-这一次,彻底搞懂 Promise

当我麦当劳点一份汉堡套餐,收银员会给我一张收据,这个收据就是 Promise,代表已经付过钱了,麦当劳会为做一个汉堡套餐承诺要通过收据来取这个汉堡套餐。...那么这个买汉堡得到承诺会有以下 3 种状态: 等待状态:刚下单,汉堡还没做好,这时可以等待汉堡时,同时做其他事情; 成功状态:汉堡做好了,通知取餐; 失败状态:发现卖完了,通知退款; 需要注意是...,状态修改是不可逆,当汉堡做好了,承诺兑现了,就不能再回到等待状态了。...多次调用 then then 可以同一个承诺上多次调用。...原因: new promise 时,promise2 还没有完成初始化。

32530

【Netty】「源码解析」(三)设置连接超时:深入分析 ChannelFuture.sync() 执行过程

为了避免无限等待,我们可以客户端代码中设置一个超时连接时间 CONNECT_TIMEOUT_MILLIS,该时间表示客户端尝试连接服务器最长时间限制,如果在指定超时时间内未能成功建立连接,客户端应该主动抛出连接超时异常...ChannelPromise sync() throws InterruptedException { super.sync(); return this; } 上述代码目的是执行特定同步操作...await 源码解析 await 方法是一种等待机制实现,它通过检查承诺是否已完成,处理中断异常以及使用同步块和等待机制来让线程等待承诺完成。...代码块,使用当前对象作为同步锁,确保多线程环境下只有一个线程可以进入代码块。其中,该代码块核心为当承诺未完成时,一直执行循环。...循环内部,调用 incWaiters() 方法增加等待线程计数器。

53220

Leader选举通用模式

如果没有则再次进入投票阶段 有的算法会让各个节点随机等待一段时间再进入投票阶段,比如Redis Sentinel选举领头算法 修改服务器状态 Leader选举完成,各个节点会更新自己状态,...注意点:ZooKeeper Leader选举算法会在Leader选举还会等待一小段时间(默认200ms),以防会有更优Leader产生 ---- 等价选举vs择优选举 两者投票过程中存在部分差异...一轮周期内选举失败,等价选举中各个节点会等待一个随机时间,减少选举冲突,提高选举成功率;择优选举不需要等待随机时间。...择优选举:这一点也有疑问,因为择优选举中,各个节点可以一直PK,直到Leader选举成功,这是可以收敛。所以我认为也可以不引入选举周期。...改进点 设置只有部分节点才可以成为Leader(比如ZooKeeper中observer节点就不可以) 欢迎讨论,本人承诺非假日期间两小时内回复 参考 《从Paxos到Zookeeper》 Zookeeper

94420

蚂蚁区块链第7课 零知识证明隐私保护原理和蚂蚁BAAS接口调用实现

面对强盗,阿里巴巴是这么想:如果把咒语告诉了他们,他们就会认为没有价值了,就会杀了我省粮食;但如果死活不说,他们也会认为没有价值而杀了。...这的确是一个令人纠结问题,但阿里巴巴想了一个好办法,当强盗向他拷问打开山洞石门咒语时,他对强盗说:“你们离开一箭远地方,用弓箭指着,当你们举起右手就念咒语打开石门,举起左手就念咒语关上石门...生成承诺承诺验证非常简单,不幸是,如果没有附加措施这个场景是不安全。...把承诺当成公钥,对承诺哈希值签名,通过这种方法,某个佩德森承诺可以被证明是对0值承诺签名中使用公钥用于防止把签名设置成任意值并且破解出承诺。签名使用私钥正是盲化因子。...设置 Transaction extensions 字段为 Proofs 序列化字节数组。 查看 Java SDK 隐私保护接口说明,了解更多信息。

1.8K30
领券