nodejs使用一个参数/ callback来实现一个回调函数

时间:2018-12-14 02:13:31

标签: node.js promise

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');

1 个答案:

答案 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) }
)

也不要像数学家那样养成使用单字母变量的习惯;)我意识到这只是示例代码,但是即使这样,更明确地表达自己的意图也是有帮助的。