Javascript 在promise解析后解析值
我有这样的代码。。我想取一些内容,在加载完之后,做些什么。 所以我使用Promise.all并稍后访问解析值。但它给出的是价值,但就像承诺{‘这里的内容’}。(请参阅console.log.) 我本打算用正则表达式来提取它,但我检查了它的类型,它不是字符串,而是没有键的对象?为什么?Javascript 在promise解析后解析值,javascript,promise,es6-promise,Javascript,Promise,Es6 Promise,我有这样的代码。。我想取一些内容,在加载完之后,做些什么。 所以我使用Promise.all并稍后访问解析值。但它给出的是价值,但就像承诺{‘这里的内容’}。(请参阅console.log.) 我本打算用正则表达式来提取它,但我检查了它的类型,它不是字符串,而是没有键的对象?为什么? var request=require('request'); var urls=['someurl','someurl2','someurl3']; var contents
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");
});
}
内容
仍然只是承诺。你永远无法直接提取承诺的价值;您只能通过
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()
返回的数据