util.promisify似乎总是从回调函数中获得2个参数,但是现有函数没有针对err和数据的单独回调,而只有一个回调。
我该如何处理?
const {promisify} = require('util');
function y(text,cb){
setTimeout(function(){cb({error:false,data:text})},1000);
}
async function test(text) {
try{
const z = promisify(y)
return await z(text);
} catch(e) {return {error:true,msg:e}}
}
console.log(test('xxx'));
我要寻找的是同步地从函数y返回值,而不是得到诺言。
var x = test('xxx');
答案 0 :(得分:0)
鉴于the information in your comment,您可以使用兼容的签名将函数包装起来,然后直接传递给promisify()
:
const { promisify } = require('util')
function y (query, callback) {
callback(query)
}
function yCompatible (query, callback) {
y(query, ({ error, data }) => {
callback(error && data, error || data)
})
}
const yAsync = promisify(yCompatible)
async function test (query) {
try {
return yAsync(query)
} catch (error) {
return error
}
}
test('xxx').then(
data => { console.log(data) },
error => { console.error(error) }
)
也不要像数学家那样养成使用单字母变量的习惯;)我意识到这只是示例代码,但是即使这样,更明确地表达自己的意图也是有帮助的。