【问题标题】:Why does the process end after executing a one function without any errors?为什么执行一个函数后进程没有任何错误就结束了?
【发布时间】:2021-09-16 07:47:18
【问题描述】:

我以为进程被卡住等待解决。 但它返回“Hello, A”并退出进程。

我不明白为什么它刚刚退出。

我知道如果我只是添加解决或拒绝它就会解决。

但我想要一些深刻的东西。

function funA(name) {
  return new Promise(function(resolve, reject) {
    console.log("Hello, " + name);
  });
}

(async() => {
  await funA("A");
  await funA("B");
})();
// Hello, A
// exit

VScode Image


解决

what happens when a Promise never resolves?

【问题讨论】:

标签: javascript node.js async-await es6-promise


【解决方案1】:

确保完成你的承诺,否则它仍然会等待 FunA("A") 完成。您可以拨打resolve()

function funA(name) {
  return new Promise(function (resolve, reject) {
    console.log("Hello, " + name);
    resolve();
  });
}

(async () => {
  await funA("A");
  await funA("B");
})();

编辑:回答您的问题,如果您不解决,它为什么会退出并且不会挂起:当nodejs 不再处理回调时会发生这种情况。当您在没有解决的情况下返回已损坏的未决承诺时,您还没有在 nodejs 队列中创建回调,因此 nodejs 决定退出

【讨论】:

  • 问题是为什么不挂起
【解决方案2】:

基本上,您的函数调用已陷入困境......它们还没有退出......

即使节点控制台显示消息...

Hello, A
Promise { <pending> }

还请注意,这是第一次调用本身,它已经进入了边缘。第二次甚至都没有开始......第一个“等待”本身还没有完成执行......这意味着,虽然你的函数看起来已经运行完成,但它正在执行的“承诺”还没有......这就是为什么等待没有完成......

【讨论】:

    猜你喜欢
    • 2021-04-03
    • 2019-02-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-01-06
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多