当前位置: 首页 > 知识库问答 >
问题:

promise是回调的完全替代方案吗?

朱兴学
2023-03-14

我是node.js的新手

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

promise存在时,我何时需要回拨?

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

共有1个答案

谢同化
2023-03-14

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

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

promise不是关于重复发生的事件,这些事件通常由作为回调传递的函数处理。

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

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

使用promise,可以将其改写为:

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

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

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

你会怎么改写?

可观测数据将是解决这一问题的一种方法。它们允许您对多个异步操作作出反应。如果您开始对可观测数据进行研究,您将看到以下表格:

|          | Singular       | Plural            |
|----------|----------------|-------------------|
| Spatial  | Value          | Iterable<Value>   |
| Temporal | Promise<Value> | Observable<Value> |
 类似资料:
  • 知识点 理解 Promise 概念,为什么需要 promise 学习 q 的 API,利用 q 来替代回调函数(https://github.com/kriskowal/q ) 课程内容 第五课(https://github.com/alsotang/node-lessons/tree/master/lesson5 )讲述了如何使用 async 来控制并发。async 的本质是一个流程控制。其实在

  • 问题内容: 关于部署Node.js应用程序,我看过很多教程,展示了它与Nginx并排部署的方法,或多或少有一些漂亮的技巧可以使两者一起工作(令人讨厌的东西,例如Nginx不支持WebSockets) 。这对我来说似乎有点复杂… 为什么每个人都进行这种设置?有Node.js时部署Nginx是否有任何优势?您不能使用Node.js提供静态文件吗? 我已经在Django中编写了许多应用程序,并且文档说您

  • 问题内容: 我有一个简单的节点模块,该模块连接到数据库,并且具有几个用于接收数据的功能,例如,以下功能: dbConnection.js: 该模块将从另一个节点模块中以这种方式调用: app.js: 我想使用promise而不是回调以返回数据。到目前为止,我已经在以下线程中阅读了有关嵌套的Promise的内容:使用嵌套的Promises编写干净的代码,但是我找不到适合该用例的任何简单解决方案。用承

  • 问题内容: 以前,我总是以为Vector在长度未知的情况下可以很好地用于非描述对象。据我所知,我也认为它也是线程安全的 有什么改变不应该再使用了,替代方案是什么? 问题答案: 您应该使用而不是。虽然使用了内部同步,但是对于实际的一致性而言,这很少够用,只会在真正不需要时降低执行速度。 另请参阅此stackoverflow问题。

  • 问题内容: 我们有一个类,其中包含应用程序的配置信息。它曾经是一个单身人士。经过一些体系结构审查后,我们被告知删除单例。我们确实看到了在单元测试中不使用单例的一些好处,因为我们可以一次测试所有不同的配置。 没有单例,我们必须在代码中的所有地方传递实例。变得太乱了,所以我们写了一个单例包装器。现在我们将相同的代码移植到PHP和.NET,我想知道是否有更好的模式可用于配置对象。 问题答案: 在谷歌测试

  • 我浏览了“http://www . IBM . com/developer works/Java/library/j-jtp 10264/”这篇文章。他们提到“锁框架是同步的兼容替代品”。我知道通过使用可重入锁,我们可以跨方法持有锁,等待锁一段时间(使用同步块(或)方法是不可能的)。我的疑问是,有没有可能用带有可重入锁的同步机制来代替应用程序? 例如,我想实现一个线程安全的堆栈数据结构,其中所有的