Promise 是做什么的?

iRo*_*tia 3 javascript redis node.js promise

我正在关注 Stephen Grinder 教程,他开始使用 Promisify。

为此他给出了非常模糊的解释,说redis需要一个回调函数,他发现非常不整洁+redis不支持NodeJS中的promise

然后他做了这样的事情

     const redis = require('redis')
      const redisURL = 'redis://127.0.0.1:6379';
      const redisClient = redis.createClient(redisURL);
      const util = require('util')

      client.get = util.promisify(client.get)

      const cachedBlog = await client.get(req.user.id)
Run Code Online (Sandbox Code Playgroud)

由于某种原因,我发现解释很模糊,有人可以用最人性化的方式解释一下吗?比如他的意思是什么以及我们正在做什么?

Ped*_*lva 13

当您想要将回调函数转换为基于 Promise 的函数时,可以使用 Promisify。如今,使用 Promise 是因为让开发人员可以编写更结构化的代码。对于回调,你会遇到一个称为末日金字塔http://callbackhell.com/ )的问题。每个函数都在另一个函数内部调用,并且代码开始水平增长。通过 Promise,您可以使用then来调用另一个函数。我来给你展示。

回调示例

 a (function (data1) {
  b (function (data2) {
    c (function (data3) {
      d (function (data4) {
        e (function (data5) {
          f (function (data6) {
            // The Egyptians would be jealous of this pyramid!
          })
        }  
      })
    })
  })
})
Run Code Online (Sandbox Code Playgroud)

承诺示例

a(data1)
.then(return b(data2))
.then(return c(data3))
.then(return d(data4))
.then(return e(data5))
Run Code Online (Sandbox Code Playgroud)

如果您愿意,我可以发布一个更好的示例,但我认为这会对您有所帮助