请注意,这只是一个刻意编造的例子。
function longFunc(){
var deferred = $.Deferred();
setTimeout(function(){
console.log("long func completed");
deferred.resolve("hello");
}, 3000);
return deferred.promise();
}
function shortAfterLongFunc(x){
console.log('short func completed with value: ' + x);
return {
a: x
};
}
processFurther(longFunc().then(shortAfterLongFunc)); // send the array for further processing
问题
我无法弄清楚在shortAfterLongFunc
完成后如何返回任何类型的对象/函数以供下游进一步处理。我可以从shortAfterLongFunc
中使用console.log,但这不是我要求的。
此处有演示代码
谢谢您的关注!
更新:
好的,只是为了让我的问题更好一些......我正在看一个简单的用例:
$.map(['H','E','L','L', 'O'], somefunc). // for each item in array apply somefunc function
function somefunc(x){ // gets called for each value 'H', 'E' etc. in the array by $.map()
var longfunc = function(y){
var deferred = $.Deferred();
setTimeout(function(){
console.log("long func completed");
deferred.resolve(y.toLocaleLowerCase());
}, 3000);
return deferred.promise();
};
var shortAfterLongFunc = function(x){
console.log('short func completed with value: ' + x);
return x;
}
// What should I do here
return longFunc(x).then(shortAfterLongFunc); // must return lower case char to the caller of someFunc
}
somefunc()
假设将数组中的每个元素转换为小写。但是,假设此处理需要很长时间且异步执行(想到setTimeout)...因此需要使用 Promise 以确保每个元素同步运行...但是在使用 Promise 后,我发现自己无法返回转换后的值。
someFunc
函数时,如何从promise
中获取data
值...function someFunc(){longFunc().then(shortAfterLongFunc).then(function(data) { console.log('all is complted', data); }); // 当有人调用someFunc()时,我想返回data}
- Vikramfunction someFunc() { return longFunc().then(...); }; var pr = someFunc(); pr.then(function(data) { console.log(data) });
。返回 Promise 对象,将其分配给变量,传递并使用其then
方法来访问已解析的数据。 - dfsq