Javascript 为什么排列运算符缺少数据?

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

我正在使用Octokit库使用GithubAPI

我有一个函数,列出一个用户(用户名)的所有存储库。单击名为
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)
  }