EDITED как комментарий к дублированию, я цитирую: [ Как вернуть ответ от асинхронного вызова?
Обещания - это контейнеры для будущих значений. Когда обещание получает значение (оно разрешено) или когда оно отменено (отклонено), оно уведомляет всех своих "слушателей", которые хотят получить доступ к этому значению.
Этот вопрос касается того, как вернуть значение, содержащееся в обещании. Ответ был полезен мне, потому что он пояснил, что вернуть значение невозможно, а получить доступ к значению в функции обещания.
Другие полезные источники о предмете, здесь:
- Как вернуть ответ от асинхронного вызова?
- http://www.html5rocks.com/en/tutorials/es6/promises/
- jQuery откладывает и обещает -.then() vs.done().
Ниже оригинального вопроса:
Не могли бы вы помочь в понимании того, как получить ценность от обещания и различий между этими двумя примерами?
//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);
})
Вместо этого следующее присваивает функцию обещания 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);
})
но никакого успеха.