Вопрос Как сделать return из callback-а?
например, есть функция
getParams(["ArrayOfParamNames"], function(CallbackResult){
//code
});
Мне нужно достать этот CallbackResult
типа
function getResult(){
getParams(["Param1","Param2"], function(res){
//Код в колбэке
});
return res; // ретёрним тот самый res, который объявляли в getParams(["Param1","Param2"], function(res)...);
}
var x = getResult()
Как вариант предлагаю использовать объект Promise
, который используется для отложенных и асинхронных вычислений:
function getResult(arrOfParamNames) {
return new Promise((resolve, reject) => {
return getParams(arrOfParamNames, function(CallbackResult){
//code
//при благоприятных условиях выполнения функции вызываем resolve
resolve(CallbackResult)
//иначе reject
//отсюда выполнение попадет в catch
});
});
}
getResult(["Param1","Param2"])
.then(res => {
//при успешном выполнении
//что то делаем с res
})
.catch(err => {
//при неуспешном выполнении
//что то делаем с err
})
Подробнее почитайте тут и тут.
у меня вот так работает:
function getGeoName(message) {
request({
url: url,
json: true
}, function (error, response, body) {
if (!error && response.statusCode === 200) {
if (body.geonames && body.geonames.length > 0) {
return weather("CityName");
}else return message.addText('Я не знаю такого города, попробуйте написать город по английски').send();
} else return message.addText('Я не знаю такого города, попробуйте написать город по английски').send();
})
};
function weather(city2) {
}
У вас должно работать так:
function getResult(){
getParams(["Param1","Param2"], function(res){
return result(res);
});
}
function result(){
}
Другой вариант:
var global;
setTimeout(function () {
function getResult() {
getParams(["Param1", "Param2"], function (res) {
global = res;
});
}
}, 8000);
Async await пример:
function serialAsyncMap(collection, fn) {
let global = [];
let promise = Promise.resolve();
getParams(["Param1", "Param2"], function (res) {
promise = promise.then(() => fn(res)).then(result => global.push(result));
});
return promise.then(() => global);
}
Виртуальный выделенный сервер (VDS) становится отличным выбором
Здравствуйте существует ли способ прокинуть аргументы в одну из функций входящих в композицию библиотеки Ramda Вот пример
При сложении чисел 1 и 2 с отображение в инпуте функция plus(), которая должна отобразить сумму 3, почему-то не работает
Я сам не так давно стал изучать js, но хочется уже щас понять в какую сторону смотреть?