Javascript 为什么排列运算符缺少数据?
我正在使用Octokit库使用GithubAPI 我有一个函数,列出一个用户(用户名)的所有存储库。单击名为Javascript 为什么排列运算符缺少数据?,javascript,rest,promise,javascript-objects,octokit-js,Javascript,Rest,Promise,Javascript Objects,Octokit Js,我正在使用Octokit库使用GithubAPI 我有一个函数,列出一个用户(用户名)的所有存储库。单击名为Fetch 为了简单起见,我只渲染第一个存储库(使用索引0) 正如我们在代码中所看到的,我正在处理一个承诺链,在这个承诺链中,我将回购结果推送到名为list的空数组中 在console.log('List Array',List)中,我能够正确获取“第0个”回购名称,如下图所示: 但是,当我尝试使用spread操作符将列表数组传递给名为list2的新数组并执行console.log(li
Fetch
为了简单起见,我只渲染第一个存储库(使用索引0)
正如我们在代码中所看到的,我正在处理一个承诺链,在这个承诺链中,我将回购结果推送到名为list的空数组中
在console.log('List Array',List)
中,我能够正确获取“第0个”回购名称,如下图所示:
但是,当我尝试使用spread操作符
将列表数组传递给名为list2
的新数组并执行console.log(list2)
时,我得到以下结果:
为什么我在这里丢失了回购协议的名称?我在做一些概念上错误的事情吗?
非常感谢您的帮助
谢谢您的then()
是异步的,因此它在控制台.log(list2)
之后运行。这就是为什么list2
仍然是一个空数组的原因
我建议将函数设置为异步
:
const list=[];
异步函数fetchRepos(){
const details=wait octokit.repos
.listForUser({
用户名:“abhinav anshul”,
});
list.push(details.data[0].name);
log('List数组',List);
}
实际上,例如,扩展操作list2=[…list]
应该包含在传递给.then()
的回调中,以确保在time@Luc125或者,更好的是,将此功能包装在async
/await
中将使其可读。即使我是同步执行的,它仍然返回一个承诺。我如何在没有承诺的情况下进一步处理数据?这个库是异步工作的,您无法控制同步工作。在调用异步方法之前,您只能正确使用then()
或将函数标记为async function
并放置await
。@RoboRobok您能用async/await编写一个代码段吗?
const list = []
function fetchRepos() {
octokit.repos
.listForUser({
username: 'abhinav-anshul',
})
.then((details) => list.push(details.data[0].name))
console.log('List Array', list)
const list2 = [...list]
console.log(list2)
}