如何将promise的返回值赋给变量?

时间:2015-09-16 15:30:01

标签: javascript jquery variables promise parameter-passing

已注册为重复评论 我引述:[How do I return the response from an asynchronous call?

  

Promise是未来价值观的容器。当承诺收到   它被解决(被解决)或被取消(被拒绝)的时候   通知所有想要访问此值的“听众”。

这个问题是关于如何返回promise中包含的值。 答案对我很有用,因为它澄清了返回值是不可能的,而是访问 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 个答案:

答案 0 :(得分:10)

您必须使用全局变量 技巧 ,或接受使用save-as-a-promise技巧。

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