首页 > 解决方案 > 节点:util.promisify() 没有回调作为最终参数

问题描述

我正在尝试使用util.promisify()转换一个使用回调的函数,以便我可以使用 async/await 调用它:https ://nodejs.org/dist/latest-v8.x/docs/api/util.html#util_util_promisify_original

到目前为止,我已经能够将它与将回调作为最终参数的函数一起使用,正如它所期望的那样。但是当另一个项目是最终参数时,我对如何使用它感到困惑。

我有一个结构如下的函数:

myFunction = function(userID, company, callback, jwt) {
    ....
    return callback(null, results)
}

由于jwt是最后一个参数,我怎样才能在这个上使用 promisify 并且仍然通过jwt?我宁愿不更改原始函数的结构,因为其他地方按原样调用它

标签: javascriptnode.js

解决方案


你可以在你的函数周围创建一个新的函数包装器,它只接受不同顺序的参数,以便最后移动回调:

const wrapper = (userID, company, jwt, callback) => 
    myFunction(userID, company, callback, jwt);

const promisified = utils.promisify(wrapper);

对于更通用的解决方案,您可以使用 Lodash rearg,它将根据您提供的数组更改参数的顺序:

const wrapper = _.rearg(myFunction, [0, 1, 3, 2]);

const promisified = utils.promisify(wrapper);

推荐阅读