как присвоить возвращаемое значение promise переменной? [дубликат]
этот вопрос уже есть ответ здесь:
отредактировано как комментарий для дублирования Я цитирую: [как вернуть ответ от асинхронного вызова?
обещания контейнеры для будущих значений. Когда обещание получает значение (разрешено) или когда оно отменено( отклонено), оно уведомляет всех своих "слушателей", которые хотят получить доступ к этому значению.
этот вопрос о том, как вернуть значение, содержащееся в обещание. Ответ был мне полезен, потому что он уточнил, что это невозможно возвращение значение, а для доступ к значению в функции обещание.
другой полезные источники по теме, здесь:
- как вернуть ответ от асинхронного вызова?
- http://www.html5rocks.com/en/tutorials/es6/promises/
- в jQuery deferreds и обещаний .затем () vs .сделано().
ниже первоначального вопроса:
не могли бы вы помочь в понимании того, как получить значение из обещания и различия между этими двумя примерами ?
//I have a simple ajax call like:
var fetch = function(start_node, end_node) {
var apiEndpoint = 'localhost/nodes/';
var loadurl = apiEndpoint+start_node+'/'+end_node;
return $.ajax({
url: loadurl,
type: 'GET',
dataType: 'json',
jsonpCallback: 'json'
});
};
// Then I processed results in something like:
var getResult = function(data) {
// do smtg with data
var result = {'myobject' : result_from_data}
return result
}
и, наконец, я хочу назначить его результаты.
следующие работы, но я думаю, что это растрачивает концепцию обещания, так как результат присваивается глобальной переменной, объявленной перед ней:
var r;
fetch('val1','val2')
.then(function(data){
r = getResult(data);
})
вместо этого следующее присваивает функцию promise res
.
var res = fetch('val1','val2')
.done(function(data){
return getResult(data);
})
не могли бы Вы уточнить, как пройти в результате 'myobject'
переменной res
, а не само обещание?
Я тоже попробовал:
var res = $.when(fetch('val1','val2'))
.done(function(data){
return getResult(data);
})
но без успеха.
1 ответов
вы должны использовать глобальную переменную фишка, или принять использовать сохранить как обещают трюк.
var getStuff = $.when(req1,req2).then(function(data1,data2) { return data1.concat(data2); });
//the variable getStuff is now a promise and any .then chained
//to it will have data1.concat(data2) passed to it as an argument
getStuff
.then(function(data1Data2) {
console.log(data1Data2);
});
//the next time you want to use it, you have to use the same promise-interface with .then
getStuff
.then(function(data1Data2) {
console.log(data1Data2);
});