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

How to resolve“下面的值刚刚求值。”for链式then函数

在链式then函数中,当一个then函数的返回值是一个Promise对象时,后续的then函数会等待该Promise对象的状态变为resolved(已解决)后再执行。而在执行过程中,如果遇到"下面的值刚刚求值"的错误提示,可以尝试以下几种方法来解决:

  1. 检查代码逻辑:首先,检查链式then函数中的代码逻辑是否正确。确保每个then函数的返回值都是一个Promise对象,以便后续的then函数能够正确执行。
  2. 检查Promise对象的状态:使用console.log或debugger等方式,检查链式then函数中的Promise对象的状态。确保Promise对象的状态正确地从pending(进行中)变为resolved(已解决),以便后续的then函数能够正确执行。
  3. 检查错误处理:在链式then函数中,可以使用catch方法来捕获错误并进行处理。通过在链式then函数的末尾添加一个catch函数,可以捕获并处理任何可能出现的错误,以避免"下面的值刚刚求值"错误的发生。
  4. 检查Promise链的返回值:在链式then函数中,确保每个then函数都返回一个值,以便后续的then函数能够正确执行。如果某个then函数没有返回值,可以使用return语句来返回一个值,或者返回一个新的Promise对象。
  5. 检查异步操作:在链式then函数中,如果存在异步操作,确保异步操作正确地返回一个Promise对象,并在异步操作完成后使用resolve函数将Promise对象的状态设置为resolved(已解决),以便后续的then函数能够正确执行。

总之,解决"下面的值刚刚求值"错误的关键是检查代码逻辑、Promise对象的状态、错误处理、Promise链的返回值和异步操作等方面,确保每个环节都正确无误。

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

相关·内容

Promise, async, await实现异步编程,代码详解

回到话题 ok,那我们现在就一起来学习一JS的异步编程吧,异步的诞生是因为同步带来的诸多不便,我们都知道JavaScript是单线程时间循环模型,同步如同流水线,一步步的往下走中间有步骤失败,下面的功能就无法进行...刚刚的大白话已经点名,为了能更直观的感受,我们看下面这段代码: 【代码示例1】 const i = 'HelloWord'; setTimeout(() => { console.log('JavaBuild...由于这些方法返回 Promise,因此它们可以被链式调用。...【代码示例5】 async function msg(){ let p = new Promise((resolve,reject)=>setTimeout(resolve,1000,...等到await右边的可以使用了,就是处理完回调了,js会向消息列对中推送一个任务,这个任务会恢复异步函数的执行。这样的话,即使await后面跟着一个立即可用的函数的其余部分也会被异步求值

12100

promise & axios & async_await 关于 Promise

,哪有那么麻烦的写法,只需要在末尾catch一就可以了,因为链式写法的错误处理具有“冒泡”特性,链式中任何一个环节出问题,都会被catch到,同时在某个环节后面的代码就不会执行了。...所以可以把上面的简化改写成 //简化三层链式调用并且改成箭头函数 MyPromise(1000).then(function(succesData) { //修改一 succesData...,发现上面的不执行了,下面的继续执行 console.log(err); }) ​ promise的then链式调用仍然是层层依赖的逻辑但是不会像“地狱回调”那么不美观和不易于维护 promise...,await顾名思义就是‘等一’(等一我这个promise异步执行完你下面的再执行)让异步编程做起来更有同步的感觉。...(3)await顾名思义就是等待一会,当且仅当await后面声明的是一个promise还没有返回,那么下面的程序是不会去执行的!!!让异步编程做起来更有同步的感觉。

1.4K20

Generator 函数的异步应用

它不是新的语法功能,而是一种新的写法,允许将回调函数的嵌套,改成链式调用。采用 Promise,连续读取多个文件,写法如下。...那时,编程语言刚刚起步,计算机学家还在研究,编译器怎么写比较好。一个争论的焦点是"求值策略",即函数的参数到底应该何时求值。...f(x + 5) // 传调用时,等同于 f(6) 另一种意见是“传名调用”(call by name),即直接将表达式x + 5传入函数体,只在用到它的时候求值。...传调用比较简单,但是对参数求值的时候,实际上还没用到这个参数,有可能造成性能损失。...第四行,在参数不符合要求的情况(参数非 Thunk 函数和 Promise 对象),将 Promise 对象的状态改为rejected,从而终止执行。

1.4K20

手动实现PromiseA+

,实际当中的 then 函数非常强大,可以链式调用,当前的返回可以作为下一个 then 的接收,而且 promsie 主要是为了解决异步回调问题。...('data === ',data); // 1111 }, e => { console.log('error === ',e); }); 显然,我们刚刚实现的 promise 不能链式调用...,也不能正确处理异步回调,我们的 then 方法是同步的代码,用户在异步的情况使用 resolve 或者 reject 函数,在调用 then 方法时,resolve 或 reject 函数还没有执行...data1这个 then 方法不再返回,因此它下面的 then 方法打印的结果都是 undefined。...().then().then(d => console.log(d)); // 即使中间的 then 函数没有传参,后面的 then 函数也可以获取到,这被称为“穿透” onFulfilled

47110

深入理解nodejs中的异步编程

但是遗憾的是,如果我们需要依赖回调函数的返回来进行下一步的操作的时候,就会陷入这个回调地狱。 叫回调地狱有点夸张了,但是也是从一方面反映了回调函数所存在的问题。...如果不设置回调函数,Promise内部抛出的错误,不会反应到外部。 当处于Pending状态时,无法得知目前进展到哪一个阶段(刚刚开始还是即将完成)。...比如我们从一个promise中,resolve了一个,我们需要根据这个来进行一些业务逻辑的处理。 假如这个业务逻辑很长,我们就需要在下一个then中写很长的业务逻辑代码。...要是使用await得到resolve,我们需要将其放在一个async的函数中: const doSomething = async () => { const resolveValue = await...async的特点 async会让所有后面接的函数都变成Promise,即使后面的函数没有显示的返回Promise。

1.3K30

ES6中的Promise和Generator详解

,并将紧跟在yield后面的那个表达式的,作为返回的对象的value属性。...(3)如果没有再遇到新的yield语句,就一直运行到函数结束,直到return语句为止,并将return语句后面的表达式的,作为返回的对象的value属性。...它不是新的语法功能,而是一种新的写法,允许将回调函数的嵌套,改成链式调用。...在讲Thunk函数之前,我们讲一函数的调用有两种方式,一种是传调用,一种是传名调用。...“传名调用”(call by name),即直接将表达式x + 5传入函数体,只在用到它的时候求值。 编译器的“传名调用”实现,往往是将参数放到一个临时函数之中,再将这个临时函数传入函数体。

1.2K21

深入理解nodejs中的异步编程

但是遗憾的是,如果我们需要依赖回调函数的返回来进行下一步的操作的时候,就会陷入这个回调地狱。 叫回调地狱有点夸张了,但是也是从一方面反映了回调函数所存在的问题。...如果不设置回调函数,Promise内部抛出的错误,不会反应到外部。 当处于Pending状态时,无法得知目前进展到哪一个阶段(刚刚开始还是即将完成)。...比如我们从一个promise中,resolve了一个,我们需要根据这个来进行一些业务逻辑的处理。 假如这个业务逻辑很长,我们就需要在下一个then中写很长的业务逻辑代码。...要是使用await得到resolve,我们需要将其放在一个async的函数中: const doSomething = async () => { const resolveValue = await...async的特点 async会让所有后面接的函数都变成Promise,即使后面的函数没有显示的返回Promise。

1.3K21

ES6--Promise、Generator及async

yield [[expression]] ​ yield 关键字使生成器函数暂停执行,并返回跟在它后面的表达式的当前。..., done: true} (1)遇到yield语句,就暂停执行后面的操作,并将紧跟在yield后面的那个表达式的,作为返回的对象的value属性; (2)下一次调用next方法时,再继续往下执行...,直到遇到下一个yield语句; (3)如果没有再遇到新的yield语句,就一直运行到函数结束,直到return语句为止,并将return语句后面的表达式的,作为返回的对象的value属性;...需要注意的是,yield语句后面的表达式,只有当调用next方法、内部指针指向该语句时才会执行,因此等于为JavaScript提供了手动的“惰性求值”(Lazy Evaluation)的语法功能。...function* gen() { yield 123 + 456; } ​ 上述示例中,yield后面的表达式123 + 456,不会立即求值,只会在next方法将指针移到这一句时,才会求值

67021

重学JavaScript Promise API

我们可以向这两个方法传递,这些将在消费代码中可用。 要了解这在实践中是如何工作的,请参考下面的代码。...该构造函数用于封装尚未支持Promise的函数或API,例如上面的XMLHttpRequest对象。传递给Promise构造函数的回调包含用于从远程服务获取数据的异步代码。...Promise链式调用 有时可能需要将多个异步任务按照特定顺序链在一起。这就是所谓的Promise链式调用。让我们重温一 setTimeout 示例,以了解Promise链式调用的基本工作原理。...hideLoadingSpinner()); }; getFirstContributor('facebook', 'react'); 它不接收任何参数并返回一个Promise,因此我们可以在它的返回链式调用更多的...只要它接收到的一个Promise实现或者拒绝,race本身就会使用刚刚settled的Promise的或原因来实现或拒绝: Promise.race([ new Promise((resolve,

13420

【译】怎么写一个JavaScript Promise

旁注,我们可以从任何函数返回promise。他不必是异步的。话虽这么说,promise通常在它们返回的函数是异步的情况返回。...在上面的示例中,我们的函数返回了一个promise对象。这允许我们使用方法的链式功能。...我打赌你看到过下面的这种链式方法: const a = 'Some awesome string'; const b = a.toUpperCase().replace('ST', '').toLowerCase...在任何一种情况,我们都会传递一些resolve和reject。 image.png 现在,我们可以使用正在返回的promise结果(也称为消费promise)。...在任何情况,它们有助于使我们的代码更优雅,可读和高效。 总结 Promises是对象,其包含了有关某些异步代码的完成以及我们想要传入的任何结果的信息对象。

70720

Promise 实践

作者:何方舟 promise已经是成为我们解决回调炼狱的常用方案,而且已经得到官方标准支持,如果你刚刚开始使用Promise,本文将帮助你了解几个常见的几个Promise的使用场景 使用Promise...如上面代码所示,我们可以很清楚的理解到程序执行的顺序是 得到userinfo 得到groupinfo 得到taskinfo 这样的代码在许多Promise示例中都可见,但这里有一点需要特别注意一,...当要在使用链式Promise时,请在then传入的方法中返回一个新的Promise。...传递给下个then方法的只能有一个,上面 getTaskInfo方法中是无法获取到userInfo的,所以如果有多个需要放在一个数据集合(Array,Object,Map,Set)中传入下个方法)...curry化是指,把需要传递多参数的函数生成一个新的函数,如上代码 先通过执行 timer得到一个新的函数,该函数会返回一个Promise,这样就完成了Promise化。

67500

20行实现一个Promise

说到Promise,我们首先想到的最核心的功能就是异步链式调用,本篇文章就带你用20行代码实现一个可以异步链式调用的Promise。...resolve(1) }, 500) } new Promise(excutor) 分开来看,excutor就是用户传的函数,这个函数内部调用了resolve函数后,就会把promise实例上的....then(console.log) then1其实进入了promise1的回调数组里,所以resolve1执行完毕后,then1才会执行 then2其实进入了promise2的回调数组里,又因为我们刚刚知道...,resolve2正是promise2的resolve方法, 所以resolve2执行完毕后, then2才会执行,这就实现了异步的链式调用。...要点总结 一个核心的要点: 简单情况 then1函数是个同步函数,返回一个普通的

13520

最简实现Promise,支持异步链式调用(20行)

说到Promise,我们首先想到的最核心的功能就是异步链式调用,本篇文章就带你用20行代码实现一个可以异步链式调用的Promise。...这个Promise的实现不考虑任何异常情况,只考虑代码最简短,从而便于读者理解核心的异步链式调用原理。 代码 先给代码吧,真就20行。...,又因为我们刚刚知道,resolve2正是promise2的resolve方法, 所以resolve2执行完毕后, then2才会执行,这就实现了异步的链式调用。...要点总结 一个核心的要点: 简单情况 then1函数是个同步函数,返回一个普通的。...被resolve了,是不是then1里的函数就被执行了呢~ 复杂情况 then函数返回了个promise 如果这个then函数里返回了一个promise,那么这个返回的promise内部的resolve

93520

手搓自动微分

-0.07743199] 这里面的函数定义为: f(x) = \sin(\cos(x)) 其导数解析形式为: f'(x)=-\cos(\cos(x))\sin(x) 也可以用MindSpore...手搓自动微分 自己实现自动微分,其实就是把每一个操作函数的导数函数定义好,例如我们可以定义某一个操作的求导函数为__grad__(),而求值函数在python中有一个内置的__call__()函数。...例如我们可以基于numpy的函数自定义一个正弦函数的类: import numpy as np class SIN: def __call__(self, x): """计算正弦...(x)) def value_and_grad(obj): """初始化求值求导对象""" return ValueAndGrad(obj) 需要注意的是,因为大多数的场景都会涉及到复合函数的计算...虽然每个框架所使用的自动微分的原理不尽相同,但大致都是基于链式法则计算结合图计算的一些优化。如果是自己动手来手搓一个自动微分框架的话,大致就只能实现一一阶的链式法则的自动微分。

14410

2022秋招前端面试题(八)(附答案)

现在条件变成了 [] == 0 的问题了,当一个对象参与条件比较的时候,它会被求值求值的结果是数组成为一个字符串,[] 的结果就是 '' ,而 '' 会被当作 0 ,所以,条件成立。...因此,这里会通过闭包访问到外部的变量 f, 重新赋值,现在执行 f 函数返回已经成为 false 了。而 g 则不会有这个问题,这里是一个函数内定义的 g,不会影响到外部的 g 函数。...链式处理是 Promise 的又一优点,但是事件却不能这样链式处理。③Promise 与回调对比解决了回调地狱的问题,将异步操作以同步操作的流程表达出来。...2、如果不设置回调函数,Promise内部抛出的错误,不会反应到外部。3、当处于Pending状态时,无法得知目前进展到哪一个阶段(刚刚开始还是即将完成)。...1、首先创建了一个新对象2、设置原型,将对象的原型设置为函数的prototype对象3、让函数的this指向这个对象,执行构造函数的代码(为这个新对象添加属性)4、判断函数的返回类型,如果是类型,返回创建的对象

52520

如何用 JavaScript 实现一个数组惰性求值

看到函数式语言里面的惰性求值,想自己用 JavaScript 写一个最简实现,加深对惰性求值了解。用了两种方法,都不到 80 行实现了基本的数组的惰性求值。...当有多个惰性操作的时候,构成一个求值函数链,每次求值的时候,每个求值函数都向上一个求值函数求值,返回一个。最后当计算函数终止的时候,返回一个终止。 ?...具体实现 判断求值函数终止 每次求值函数都会返回各种数据,所以得使用一个独一无二的来作为判断流是否完成的标志。刚好 Symbol() 可以创建一个新的 symbol ,它的与其它任何皆不相等。...生成函数 range range 函数接受一个起始和终止参数,返回一个求值函数,运行求值函数返回一个,终止的时候返回终止。 ?...还得加上链式调用才算是完成了。 ? 最后再测试一: ? 好了,大功告成。 总结 这样我们就完成了一个最简的数组惰性求值的库,这里只是简单实现了惰性求值,要放到工程中还需要添加很多细节。

75120
领券