Я использую определенную библиотеку node.js, в которой вы определяете функцию обратного вызова, которая должна возвращать значение.
Внутри этого обратного вызова я хочу использовать функцию из другой библиотеки, которая возвращает обещание этого значения.
Как я могу определить функцию обратного вызова для возврата значения из разрешенного обещания?
Как отредактировать следующий фрагмент, чтобы я возвращал значение обратного вызова только тогда, когда обещание было разрешено?
Util_A.someFunction( (a)=>{
Util_B.somePromise(a)
.then((result)=>{
// This is the value that I want to return to
// the original function 'someFunction'
return result;
});
}),
Что вы подразумеваете под "определить функцию обратного вызова для возврата значения"? Вы хотите вернуть его из обратного вызова в Util_A? Что такое Util_A.somecallback? Более конкретный пример облегчит понимание вашего вопроса.
Я думаю, он хочет дождаться результата обещания, получить значение и вернуть его как возвращаемое значение функции обратного вызова, переданной в Util_A.somecallback, но это не так, как это должно работать...
Вы не можете сделать ни того, ни другого. Вы не можете вернуть значение из результата обещания в обратный вызов, и вы не можете значение из обратного вызова во внешнюю область.
Я голосую за то, чтобы закрыть это, поскольку неясно, о чем вы спрашиваете, пока вы не редактировать свой вопрос, чтобы сообщить нам куда, что именно вы хотите, чтобы result использовался
Извините, что мой вопрос неясен. Я немного отредактировал это и надеюсь, что это яснее.



![Безумие обратных вызовов в javascript [JS]](https://i.imgur.com/WsjO6zJb.png)


Итак, если я правильно понимаю, somecallback будет что-то делать с возвращаемым значением обратного вызова, который он вызывает.
Если somecallback не поддерживает промисы или другую асинхронность от ретвала, сделать это невозможно.
Не уверен, почему за это проголосовали, это правильный ответ, если @AKX правильно понял вопрос (что, по общему признанию, неясно)
Может как-то так:?
new Promise(resolve => Util_A.somecallback(resolve))
.then(a => Util_B.somePromise(a))
.then(result => console.info(result))
.catch (err => console.error(err.message));
Обновлено: Улучшенная цепочка промисов.
Вместо Util_B.somePromise(data).then((result)=>{ resolve(result); }).catch(e => reject(e)); можно просто использовать resolve(Util_B.somePromise(data))
вы используете await для хранения кода во время промисов.
Если это делает то, что хочет ОП, лучше написать new Promise(resolve => Util_A.somecallback(resolve)).then(a => Util_B.somePromise(a))
@Bergi Это еще элегантнее! Спасибо за совет
Вы должны преобразовать функцию Util_A в функцию на основе Promise. Как ? Используя собственный метод Использовать.обещать() node.js (Я сделал собственную реализацию для фрагмента).
Никогда не путайте обратный вызов/обещание.
const Util_A = {
somecallback: callback => callback(false, 'callback return'),
};
const Util_B = {
somepromise: () => new Promise((resolve) => resolve('promise return')),
};
function promisify(func) {
return () => new Promise((resolve, reject) => {
func((err, val) => {
if (err) return reject(err);
return resolve(val);
});
});
}
// Native Util.promisify() in node.js
promisify(Util_A.somecallback)()
.then((ret) => {
console.info(ret);
return Util_B.somepromise();
})
.then((ret) => {
console.info(ret);
});
Привет, Попробуйте вернуть Util_B.sommePropose(a).... материал