nodejs обещает функцию обратного вызова с одним параметром / обратным вызовом - PullRequest
0 голосов
/ 14 декабря 2018

util.promisify, кажется, всегда ожидает 2 параметра от функции обратного вызова, однако существующие функции не имеют отдельного обратного вызова для ошибки и данных, а только один обратный вызов.

Как я могу это обработать???

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 голосов
/ 14 декабря 2018

Учитывая информацию в вашем комментарии , вы можете обернуть функцию совместимой подписью для прямой передачи в 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) }
)

Также попробуйте не входить впривычка использовать однобуквенные переменные как математик;) Я понимаю, что это всего лишь пример кода, но даже в этом случае полезно быть более откровенным в своих намерениях.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...