如何在解决承诺后从承诺对象获取值
How to fetch value from Promise object after promise has been resolved
请注意,这是一个人为的例子。
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
完成后返回任何类型的对象/函数以进行进一步的下游处理。我可以安慰.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
}
somefunc()
假设将数组的每个元素处理为小写。但是,假设此处理需要很长时间并且异步(想想setTimeout(。因此,承诺确保每个元素的同步操作......但是在使用承诺时,我发现自己无法返回转换后的值
只需链接另一个then
调用,因为shortAfterLongFunc
返回新的承诺,您可以进一步使用它:
longFunc().then(shortAfterLongFunc).then(function(data) {
console.log('all is complted', data);
});
演示:http://jsfiddle.net/ebt4pxxa/2/
有一个技巧,定义一个数组或对象并对其进行值:
let Result=[];
let callImport = (load)=>{
import('./component.js').
then((Module)=>{
load[0] = Module;
});};
callImport(Result);
setTimeout(()=> console.log(Result[0]),10);
在这里,我使用 setTimeout 作为等待来防止在承诺执行完成之前打印结果。这是没有设置超时的代码笔示例: https://codepen.io/MNSY22/pen/NWPdvxd
相关文章:
- 带有对象/原型的链式承诺(Q延期)
- AngularJS:根据值解析承诺对象
- 对承诺对象的混淆
- 尝试编写承诺时出错:承诺解析器对象不是函数
- 传播承诺并在新对象中扩展
- 是否可以将已解析的承诺分配给对象的属性
- AngularFire $createUser 的承诺不返回包含用户数据的对象
- 如何获取 Ember 组件对象内部承诺成功或错误回调
- 为整个承诺对象呈现承诺值
- 如何检查对象是否为承诺
- 如何在解决承诺后从承诺对象获取值
- 承诺不返回对象
- 基于当前平台创建承诺对象
- 什么是承诺对象
- 将多个Bluebird承诺组合到一个承诺对象中
- 访问返回的承诺对象数组值
- angular承诺对象之间的区别
- 访问承诺对象angular的值
- 为什么这个对象在angular http承诺对象中是$window ?
- 访问jQuery $.从蓝鸟承诺对象中获取URL