当前位置: 首页 > 面试题库 >

为什么.then()中的value未定义链接到Promise?

李利
2023-03-14
问题内容

给定

function doStuff(n /* `n` is expected to be a positive number */) {

  return new Promise(function(resolve, reject) {

    setTimeout(function() {

      resolve(n * 10)

    }, Math.floor(Math.random() * 1000))

  })

  .then(function(result) {

    if (result > 100) {

      console.log(result + " is greater than 100")

    } else {

      console.log(result + " is not greater than 100");

    }

  })

}



doStuff(9)

.then(function(data) {

  console.log(data) // `undefined`,  why?

})

为什么data undefined.then()链接到doStuff()电话吗?


问题答案:

因为没有ed Promise或其他值return.then()链接到Promise构造函数。

请注意,.then()返回一个新Promise对象。

解决方案是return使用returnvalue或Promisefrom 的值或其他函数调用.then()

function doStuff(n /* `n` is expected to be a positive number */) {

  return new Promise(function(resolve, reject) {

    setTimeout(function() {

      resolve(n * 10)

    }, Math.floor(Math.random() * 1000))

  })

  .then(function(result) {

    if (result > 100) {

      console.log(result + " is greater than 100")

    } else {

      console.log(result + " is not greater than 100");

    }

    // `return` `result` or other value here

    // to avoid `undefined` at chained `.then()`

    return result

  })

}



doStuff(9)

.then(function(data) {

  console.log("data is: " + data) // `data` is not `undefined`

});


 类似资料:
  • 问题内容: 我正在使用Vue.js创建一个组件。 当我引用中的任何所述的生命周期钩(,,等等)它的计算结果为: 我的计算属性内部也发生了同样的事情: 我收到以下错误: 未捕获的TypeError:无法读取未定义的属性“ bar” 为什么要在这些情况下进行评估? 问题答案: 这两个示例都使用arrow函数,该函数绑定到与Vue实例不同的上下文。 根据文档: 不要在实例属性或回调(例如)上使用箭头功能

  • 我在chrome控制台中写了这样的表达式: 它返回:

  • 我有财产课: 还有一种方法: 在类的构造函数我有: 为什么当我从object按键调用函数时。我收到一条未定义的消息,为什么变量在内部不可用:

  • 我找不到这个职位的申请书http://127.0.0.1:3001/users?name=Slava. 服务器响应“需要名称”。方法getUsers正常工作。数据库工作正常,服务器。js也能工作。我在这里寻找类似的答案,但没有合适的答案。有一些非常古老的答案,但它们并不相关。 这是一项请求:http://127.0.0.1:3001/users?name=bob (我用邮递员送信)

  • 我今天将我的serenity和cucumber测试升级到2.6.0 en cucumber 6版本。只需要更改大量程序包,并且功能文件的步骤不再链接到步骤定义。如果我的cucumberrunner的设置 但是,如果我在功能文件中查看intellij,您将无法再单击步骤以转到定义。当我运行功能文件时,我会得到以下异常: 我不确定是什么地方出了问题,因为相同的代码适用于以前的版本

  • 问题内容: var x int done := false go func() { x = f(…); done = true } while done == false { } 这是Go代码。我的恶魔告诉我,这是UB代码。为什么? 问题答案: Go Memory Model不保证该程序将始终遵守在goroutine中写入x的值。go常规销毁 部分中提供了一个类似的错误程序作为示例。 在本节中,G