На данный вопрос уже ответили:
У меня есть код на node.js с модулем request похожий на этот:
var request = require('request');
function name(/*параметры*/) {
var response = '';
var options = {
/*
*/
}
function callback(err, httpResponse, body) = {
response = //Действия с body
}
request(options, callback);
}
console.log(name(/*параметры*/));
Мне нужно что-бы функция name при вызове возвращала значение response. Мне не нужен console.log, это скорее было для условности.
Дело в том что сделать это так как вы хотите чтоб прям функция вернула можно лишь одним способом с помощью async/await.
var request = require('request');
( async() => {
function name(/*параметры*/) {
return new Promise((resolve, reject) => {
var response = '';
var options = {
/*
*/
}
function callback(err, httpResponse, body) = {
response = //Действия с body
//// после действий с responce отравляем его в ответ
resolve(responce);
}
request(options, callback);
}
})
console.log( await name(/*параметры*/));
})();
Обернул код в IIFE функцию, так как await можно использовать только внутри async
const request = (options, callback) => setTimeout(() => callback(null,{},'response'),1111);
// Вариант 1: Callback
function name( callback, ...params) {
var options = params;
request(options, (err, httpResponse, body) => {
let result = body.toUpperCase();
callback(null, result);
});
}
name((err,result) => {
console.log(result);
});
// Вариант 2: Promise (то же самое, только в сахаре)
function name_promised(/*параметры*/) {
return new Promise((resolve, reject) => {
var response = '';
var options = {/**/}
request(options, (err, httpResponse, body) => {
let result = body+' promised';
resolve(result);
});
});
}
name_promised(/*параметры*/).then(result => {
console.log(result);
});
// Вариант 3: async/await (еще больше сахара)
(async () => {
let result = await name_promised();
console.log(result);
})();
Последний вариант удобно использовать с промифицированным модулем request, примерно так -
const request = require('request-promise');
(async () {
let body = await request(options);
console.log(body);
})();
Современные инструменты для криптотрейдинга: как технологии помогают принимать решения
Апостиль в Лос-Анджелесе без лишних нервов и бумажной волокиты
Основные этапы разработки сайта для стоматологической клиники
Продвижение своими сайтами как стратегия роста и независимости