【问题标题】:Is promise a full alternative for callback?承诺是回调的完整替代方案吗?
【发布时间】:2018-01-21 00:01:12
【问题描述】:

我是的新人

我对使用承诺而不是回调感到困惑。

存在时,我什么时候需要

什么是回调的属性迫使我使用它,而不是承诺?

【问题讨论】:

标签: node.js callback promise javascript asynchronous callback promise


【解决方案1】:

MDN 对 Promise 有很好的定义:

Promise 表示 [one] 异步操作的最终完成(或失败)及其结果值。

Promise 与重复发生的事件无关,这些事件通常由您作为回调传递的函数处理。

在许多情况下,可以重构回调 API 以使用 Promise:

request('file.txt', function (err, result) {
  if (err) {
    console.error('An error occurred:', err);
  }
  console.log(result);
});

使用承诺,这可以重写为:

request('file.txt')
  .then(result => console.log(result))
  .catch(err => console.log('An error occurred:', err));

然而,一个承诺只能解决一次。上面 sn-p 中的 request 函数可以包装在 promise API 中,因为回调只会执行一次。但是如果你用一个回调函数处理多个事件,就很难重写代码来使用 Promise:

server.on('request', function (req, res) {
  // ...
});

你会如何重写它?

Observables 是解决此问题的一种方法。它们允许您对多个异步操作做出反应。如果你开始做一些关于 observables 的研究,你会看到这张表:

|          | Singular       | Plural            |
|----------|----------------|-------------------|
| Spatial  | Value          | Iterable<Value>   |
| Temporal | Promise<Value> | Observable<Value> |

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-04-27
    相关资源
    最近更新 更多