已注册为重复评论 我引述:[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);
})
但没有成功。
答案 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);
});