【问题标题】:Error with javascript promise and then conditionjavascript承诺错误然后条件
【发布时间】:2023-02-10 17:47:37
【问题描述】:

我正在学习 Javascript promises 和 thens,并且对使用 Node.js 的这个错误感到困惑。

我希望 dostart() 等到非阻塞睡眠完成,然后在完成后将“已解决”返回给主函数。

我收到此错误:

dostart().then(value => {
         ^
TypeError: Cannot read properties of undefined (reading 'then')

帮助赞赏:)

function nonBlockingSleep(ms) {
  return new Promise(resolve => setTimeout(resolve, ms));
}

function dostart() {
  console.log("Hello2");

  nonBlockingSleep(2000).then(() => {
    console.log("Done");
    return Promise.resolve("Resolved");
  });
}

dostart().then(value => {
  // main func - I'd like console.log to show "Resolved" when dostart() is finished
  console.log(value);
})

【问题讨论】:

  • doStart() 没有显式返回任何内容,也没有标记为 async。因此它会自动生成undefined
  • return nonBlockingSleep(2000).then(....)

标签: javascript promise


【解决方案1】:

因为 dostart 什么都不返回,你可以这样修复它:

function dostart() {
    console.log("Hello2");

    return nonBlockingSleep(2000).then(() => { console.log("Done"); return Promise.resolve("Resolved"); });
}

或使用关键字async

async function dostart() {
    console.log("Hello2");

    nonBlockingSleep(2000).then(() => { console.log("Done"); return Promise.resolve("Resolved"); });
}

【讨论】:

  • 第一个代码是正确的。第二个没有按预期工作。 (不是我的反对票)
猜你喜欢
  • 2016-03-20
  • 2017-12-09
  • 2015-04-15
  • 2019-03-17
  • 1970-01-01
  • 2018-02-19
  • 2014-02-13
  • 1970-01-01
  • 2018-07-17
相关资源
最近更新 更多