как присвоить возвращаемое значение promise переменной? [дубликат]

этот вопрос уже есть ответ здесь:

отредактировано как комментарий для дублирования Я цитирую: [как вернуть ответ от асинхронного вызова?

обещания контейнеры для будущих значений. Когда обещание получает значение (разрешено) или когда оно отменено( отклонено), оно уведомляет всех своих "слушателей", которые хотят получить доступ к этому значению.

этот вопрос о том, как вернуть значение, содержащееся в обещание. Ответ был мне полезен, потому что он уточнил, что это невозможно возвращение значение, а для доступ к значению в функции обещание.

другой полезные источники по теме, здесь:

ниже первоначального вопроса:


не могли бы вы помочь в понимании того, как получить значение из обещания и различия между этими двумя примерами ?

//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);
  });