【发布时间】:2020-03-16 16:28:15
【问题描述】:
我正在使用 GitHub api 创建一个应用程序,但我在使用异步函数时遇到了问题。我是使用异步的新手,所以非常感谢您的帮助。这是我到目前为止编写的代码:
const getFiles = async function(token, reponame) {
var gh = new GitHub({
token: token
});
reponame = reponame.split("/");
const repo = gh.getRepo(reponame[0], reponame[1]);
let head = new Headers();
head.append("Authorization: ", "token " + token);
const getContents = new Promise((res, rej) => {
repo.getContents(null, "content", true, (err, files) => {
if (err) rej(err);
else return files;
}).then(files => {
let promises = [
files.map(
file =>
new Promise(res => {
fetch(file.downloadURL).then(body => {
res(body.text);
});
})
)
];
const retFiles = [];
await Promise.all(promises.map(promise => retFiles.push(promise)));
res(retFiles)
});
});
return getContents;
};
我得到的错误是我使用 await 的行中的意外保留字。提前致谢
【问题讨论】:
-
欢迎来到 SO!您不能使用
await,除非它直接在带有async关键字的函数内部。将files => {更改为async files => {。此外,将let promises设为二维数组有点奇怪——只需将map的结果直接分配给它,否则您将拥有一个包含promises 数组的单元素数组。 -
你的代码有很多问题,除了ggorlen
Array.prototype.push指出的那个返回数组的长度,这几乎肯定不是什么你要。异步函数的返回值会自动包装在 Promise 中。 fetch API 已经返回了一个 promise,也不需要在那里手动构建一个。目前还不清楚为什么在您进行大量 .then 链接时使用 async/await,或者在使用 async/await 时为什么要使用 .then 链接。您的标题似乎未使用。您分配给函数参数等等等等。 -
@ggorlen 谢谢你的帮助。我不知道为什么我要制作一个二维数组。我想我正在失去理智。无论如何设法弄明白了,here's the working code.
标签: javascript async-await es6-promise