На данный вопрос уже ответили:
У меня есть код на 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);
})();
Кофе для программистов: как напиток влияет на продуктивность кодеров?
Рекламные вывески: как привлечь внимание и увеличить продажи
Стратегії та тренди в SMM - Технології, що формують майбутнє сьогодні
Выделенный сервер, что это, для чего нужен и какие характеристики важны?
Современные решения для бизнеса: как облачные и виртуальные технологии меняют рынок
Есть след код, меня интересует, происходит ли в этом случае экономия памяти?
I use Google+ Login in my Wep App (Google Sign In)In browser like Chrome or Safari working fine (opens popup in new tab with chose account (enter login, passwd), then popup closed and auth successfull