【问题标题】:Waiting for promise in cli在cli中等待promise
【发布时间】:2018-08-09 06:11:41
【问题描述】:

我想通过 CLI 将管理员用户添加到我的节点应用程序。 我创建了一个文件 admin.js。这个文件看起来像:

console.log('start'); 
myPromisse.then().catch(); // This promise add admin to mongodb
console.log('end');

我制作了node admin,它可以工作......几乎:D 没有添加管理员,因为我的脚本没有等待承诺。处理此问题的最佳做法是什么?

【问题讨论】:

  • 在 .then 中加入一些代码? - 虽然,end 总是会立即记录,所以也许至少输入myPromisse.then(console.log).catch(console.error); 这样你就可以看到发生了什么

标签: javascript node.js command-line-interface


【解决方案1】:

我会这样做:

console.log('start'); 
myPromisse.then(() => {
    console.log('Admin created');
}).catch((err) => {
    console.error('An error occurred creating Admin: ', err);
});

在 promise 被解决或拒绝之前,脚本不会真正退出,最后一条日志语句可能会以这种方式误导。

【讨论】:

  • "脚本实际上不会退出" 你确定吗?我认为确实如此,至少在 2021 年。我认为您没有在实践中尝试过,或者发生了什么变化? -1 因此
【解决方案2】:

如果您使用超过 v7.6.0 的 Node.js,则可以使用 async/await 语法。

(async () => {
  console.log('start')

  try {
    const myPromiseResult = await makePromise() // your personal

    // you can write instead of `then` statement below

  } catch (err) {
    console.error(err.message);
  } finally {
    console.log('end');
  }
})()

【讨论】:

  • 是的,您可以,但这与问题的内容无关。据我了解,您的代码在承诺完成之前仍然存在。
【解决方案3】:

恐怕没有一个答案是正确的。 This one 是:

当没有更多回调要处理时,Node.js 将退出。您可以使用 setInterval 或 setTimeout 始终保持一个,这样进程就不会自动退出。

【讨论】:

    猜你喜欢
    • 2020-01-15
    • 1970-01-01
    • 1970-01-01
    • 2018-06-09
    • 2018-02-12
    • 2018-04-17
    • 2018-01-06
    相关资源
    最近更新 更多