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)
| 归档时间: |
|
| 查看次数: |
37778 次 |
| 最近记录: |