在promise解决后解析值
resolving values after promise has resolved
我有一个像这样的代码。我想要获取一些内容,并在加载完毕后做一些事情。所以我用Promise。稍后再访问所有解析值。但它给出了值,但像Promise {' content here'}。(见console.log . .)我要用正则表达式来提取它,然后我检查它的类型不是字符串,而是没有键的对象?为什么?
var request=require('request');
var urls=['someurl','someurl2','someurl3'];
var contents=[];
urls.forEach(function (u) {
contents.push(getContent(u) );
});
Promise.all(contents)
.then(function () {
// All should be loaded by now?
// Promises which are resolved are fulfiled, and values can be accessed later right?
contents.forEach(function (promise) {
var content = Promise.resolve(promise);
console.log(content); // Promise {'test'} ??
console.log(typeof content,Object.keys(content));
// object [] ???
});
}).
catch(function(err) {
//handle error here
});
function getContent(url) {
return new Promise ( function (resolve,reject) {
/** commented and stripped out for testing
request(url, function (err,response, data) {
if(err) {
reject(Error(err));
}
}); **/
resolve("test");
});
}
contents
仍然只持有承诺。
你永远不能直接提取承诺的价值;您只能从then()
回调中使用它。
相反,Promise.all()
返回一个承诺数组的结果。
更改您的then()
调用,以该数组作为回调参数,并直接使用它
首先,您以错误的方式访问结果:
Promise.all(contents).then( function(data) {
// data holds an array with the return values of the promises
console.log(data);
});
第二件事:你没有正确地创建一个承诺,本质上,你从来没有解决他们在你的getContent()
函数,所以你永远不会得到你想要的数据!
function getContent(url) {
return new Promise ( function (resolve,reject) {
request(url, function (err,response, data) {
if(err) {
// reject the promise in case of error
reject(Error(err));
} else {
// resolve the promise with the output you need
resolve(data);
}
});
当你调用resolve()
时,承诺被解决,你给它的输入被传递。当您在Promise.all()
中指定的所有承诺都被解析后,回调将被执行,您将能够访问resolve()
返回的数据。
相关文章:
- 使用promise和mongoose对文档进行排序
- 如何解决Yii中的页面刷新问题
- 测试Angular Service解决错误回调中的promise
- 节点协同与生成器和Promise并行流量控制
- 如何解决Access Control Allow Origin错误
- 在ES6 Promise中,我应该在解决/拒绝之前使用return吗
- AngularJS promise在加载数据之前得到解决
- addAssociation上的Promise是用源代码的陈旧版本解决的
- 为什么 Promise.all(array) 没有立即解决
- 承诺的解决顺序是否与Promise.sexel中提到的顺序相同
- AngularJS/Karma-测试函数返回已解决或拒绝的promise
- promise甚至在调用.resolve()之前就得到了解决
- Selenium Webdriver JavaScript: Promise似乎没有得到解决
- new Promise和Promise的区别.在bluebird中解决/拒绝
- Reactjs的render()在promise解决这个问题后不会被触发.setState被重新分配
- 在promise解决后解析值
- WebCrypto:Safari无法导出密钥(),并且promise似乎永远不会解决/失败
- deffered对象如何通知其promise它已被解决
- JavaScript Promise在解决问题时陷入困境
- 只保留解决并忽略被拒绝的promise中的值