【问题标题】:Awaiting function that resolves a promise with no arguments等待函数解决没有参数的承诺
【发布时间】:2018-09-12 16:40:42
【问题描述】:

我有一个函数可以在不传递任何参数的情况下解析 Promise:

const checkUser = (user)=> {
    let promise = Parse.Promise();

    if(user.success){
        promise.resolve();
    } else {
        promise.reject("Error");
    }
}

问题是,在我阅读的所有教程中,他们将返回值分配给一个变量,如下所示:

let response = await checkUser(user);

在上述情况下,我可以等待承诺而不将结果分配给变量还是不推荐?例如:

...
await checkUser(user);
...

【问题讨论】:

  • 我认为分配不是强制性的,因为您可能会执行不返回任何内容的操作,例如等待实现。
  • 是的,如果你不关心结果,你可以,你可以使用try { await } catch (e) { ... } 语法来检查拒绝函数抛出的错误
  • 您永远不必将表达式的结果分配给其他东西。 await ... 是一个表达式,就像 foo()1 + 1 一样。

标签: javascript ecmascript-6 ecmascript-2016


【解决方案1】:

是的,你完全可以做到。 JavaScript 仍将等待 Promise 解决。

这是对MDN's first example for await 的修改。它不返回值,但仍然等待 Promise 解决,然后再运行 await 之后的代码。

function resolveAfter2Seconds() { 
  return new Promise(resolve => {
    setTimeout(resolve, 2000);
  });
}

(async function() {
  console.log(1)
  await resolveAfter2Seconds();
  console.log(2);
})()

【讨论】:

  • 这可以简化为return new Promise(resolve => setTimeout(resolve, 2000)),或者如果ESnext 的部分应用提案被实施,你甚至可以做return new Promise(setTimeout(?, 2000))? 将函数调用转换为部分应用程序,看起来像 x => setTimeout(x, 2000)
  • 是的,但这实际上与函数无关,这只是表明您可以在不设置变量的情况下等待。如果您觉得您提出的代码更容易理解,请编辑我的答案...
【解决方案2】:

我认为在没有任何内容的情况下解决承诺是一种不好的做法,因为这是获得结果的适当渠道。如果你不想得到结果,你为什么要调用一个函数呢?不过,这可能主要适用于函数式编程。

我可以只 await 承诺而不将结果分配给变量还是不推荐?

是的,你完全可以做到。如果你不需要对结果做任何事情——比如当你知道它总是undefined——那么你可以忽略它。

【讨论】:

  • 我认为一个示例用例将等待数据库写入事务完成。您已经知道要发送的数据,并且您只需要知道在这种情况下承诺是被解决还是被拒绝。我不会说这是“不好的做法”,但它应该提出一个问题,即实际上是否有必要,如你所说。此外,强制性的“我没有投反对票”
猜你喜欢
  • 2019-10-23
  • 2014-03-12
  • 1970-01-01
  • 2019-04-29
  • 2018-04-02
  • 2021-11-26
  • 2014-10-29
  • 2018-03-19
相关资源
最近更新 更多