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

use*_*883 16 javascript variables jquery parameter-passing promise

编辑为复制的评论 我引用:[ 如何从异步调用返回响应?

承诺是未来价值观的容器.当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
    }
Run Code Online (Sandbox Code Playgroud)

最后我想分配结果.

下面的工作,但我认为它浪费了promise的概念,因为结果被分配给在它之前声明的全局变量:

var r;  
fetch('val1','val2')
.then(function(data){
  r = getResult(data);
})
Run Code Online (Sandbox Code Playgroud)

而是以下分配promise函数res.

var res = fetch('val1','val2')
.done(function(data){
  return getResult(data);
})
Run Code Online (Sandbox Code Playgroud)

你能澄清一下如何将结果传递'myobject'给变量res,而不是承诺本身吗?

我也尝试过:

var res = $.when(fetch('val1','val2'))
.done(function(data){
  return getResult(data);
})
Run Code Online (Sandbox Code Playgroud)

但没有成功.

Ada*_*dam 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);
  });
Run Code Online (Sandbox Code Playgroud)

  • 它不返回值和promise本身 - 该语句返回promise(浏览器控制台记录),它也是`console.log`的数据,这就是你看到两个日志的原因.正如您所说,您的两个选项是使用全局变量,或者只是存储承诺并始终通过`.then`访问它的数据. (2认同)