Promisify有什么作用?

时间:2018-11-10 13:00:29

标签: javascript node.js redis 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)

出于某种原因,我发现该解释含糊不清,有人可以以最人性化的方式进行解释吗?像他的意思和我们在做什么?

1 个答案:

答案 0 :(得分:3)

Promisify用于要将回调函数转换为基于Promise的函数。如今,使用诺言是因为让开发人员可以编写更多结构化的代码。使用回调,您会遇到一个名为厄运金字塔http://callbackhell.com/)的问题。其中每个函数在另一个函数内部被调用,并且代码开始水平增长。有了promises,您可以使用 then 调用另一个函数。让我告诉你。

  

回叫示例

 a (function (data1) {
  b (function (data2) {
    c (function (data3) {
      d (function (data4) {
        e (function (data5) {
          f (function (data6) {
            // The Egyptions would be jealous of this pyramid!
          })
        }  
      })
    })
  })
})
  

承诺示例

a(data1)
.then(return b(data2))
.then(return c(data3))
.then(return d(data4))
.then(return e(data5))

如果您愿意,我可以提供一个更好的示例,但是我认为这会为您提供帮助