承诺是回调的完整替代方案吗?



我是node的新手.js

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

当承诺存在时,我什么时候需要回调?

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

MDN对promises有一个很好的定义:

承诺表示 [一个] 异步操作的最终完成(或失败(及其结果值。

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

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

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));

但是,一个承诺只能解决一次。上面代码段中的request函数可以包装在 promise API 中,因为回调只会执行一次。但是,如果使用单个回调函数处理多个事件,则很难重写代码以使用promises:

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

你会如何重写它?

可观察量将是处理此问题的一种方法。它们允许您对多个异步操作做出反应。如果你开始对可观察量进行一些研究,你将看到这个表:

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

最新更新