Vik*_*ram 9 javascript jquery promise jquery-deferred
请注意这是一个人为的例子.
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
Run Code Online (Sandbox Code Playgroud)
问题
我无法弄清楚如何在shortAfterLongFunc完成后返回任何类型的对象/函数以进行进一步的下游处理.我可以来自console.log,shortAfterLongFunc但这不是我在这里要求的.
在这里小提琴
谢谢你的期待!
更新:
好的只是为了让我的问题稍微好一些......这是一个我正在看的简单用例:
$.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
}
Run Code Online (Sandbox Code Playgroud)
somefunc()让我们说将Array的每个元素处理成小写.但是,假设这个处理需要很长时间并且异步(想想setTimeout)..因此承诺确保每个元素的同步操作......但是使用promise我发现自己无法返回转换后的值
只是链接另一个then电话,因为shortAfterLongFunc返回新的承诺,你可以进一步使用它:
longFunc().then(shortAfterLongFunc).then(function(data) {
console.log('all is complted', data);
});
Run Code Online (Sandbox Code Playgroud)