我的网络服务器上有一个目录,我在其中上传timestamp.md文件以发布到我的网站上的“ blog” -div中。使用javascript通过scandir()(PHP)获取dir的索引将返回:
["2018-12-05T13:28:10.000Z.md","2018-12-05T12:58:19.858Z.md","2018-12-05T12:37:25.012Z.md","2018-12-05T12:28:52.612Z.md","..","."]
我将obve存储在var“文件”中。
然后我对从index.html进行的提取进行for循环,以获取timestamp.mds中所有内容的内容
(我创建了一个用于存储md内容的空数组)
var mdcontent = new Array()
for(var i=0;i<files.length -2;i++) {
fetch('md/'+files[i])
.then( response => response.text())
.then(result => mdcontent.push(result));
}
console.log(mdcontent) returns what looks like a normal array
consol.log(mdcontent[0]) (or any other element of array) returns undefined.
console.log(mdcontent.lenght) returns 0.
问题是如何访问此数组的元素?
我不知道这次出了什么问题,如果有人可以帮助我,我将不胜感激!
预先感谢
答案 0 :(得分:2)
当您使用fetch
时,它将返回Promise
,它代表异步操作。您不应该像这样做那样访问mdcontent
的元素-同步代码可以,但是不能在此处访问。相反,您需要等待每个诺言(每个fetch
+ .text()
)都将完成。您可以使用Promise.all
来做到这一点。
var promises = new Array();
for (var i=0; i < files.length - 2; i++) {
promises.push(
fetch('md/' + files[i])
.then(res => res.text())
);
}
Promise.all(promises).then(mdcontent => {
console.log(mdcontent);
console.log(mdcontent.length);
console.log(mdcontent[0]);
});
我建议您阅读有关异步javascript的内容。也许this article。当您不了解承诺的异步性质时,可能很难使用承诺。您可能还想使用asynchronous functions和await
而不是.then(...)
。