我正在关注Stephen Grinder的教程,在那里他开始使用Promisify。
为此,他给出了非常模糊的解释,说redis需要回调函数,并且他发现非常不整洁+ redis不支持NodeJS中的promises。
然后他做了这样的事情
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)
出于某种原因,我发现该解释含糊不清,有人可以以最人性化的方式进行解释吗?像他的意思和我们在做什么?
当您要将回调函数转换为基于promise的函数时,将使用Promisify。如今,使用诺言是因为让开发人员可以编写更多结构化的代码。使用回调,您会遇到一个问题,称为 “厄运金字塔” (http://callbackhell.com/)。其中每个函数在另一个函数内部被调用,并且代码开始水平增长。通过promise,您可以使用 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))
如果您愿意,我可以提供一个更好的示例,但是我认为这将对您有所帮助