-1

这是代码

console.log("Before");
const p = getUser(1);
p.then(user => {
  console.log(user);
  getRepositories(user.github);
}).then(repos => {
  console.log(repos);
});

console.log("after");

function getUser(id) {
  return new Promise(function(resolve, reject) {
    setTimeout(() => {
      console.log("Calling a database " + id);
      resolve({ id: id, github: "Zain" });
    }, 2000);
  });
}

function getRepositories(username) {
  return new Promise(function(resolve, reject) {
    setTimeout(() => {
      console.log(`Calling Api for ${username}`);
      resolve(["repo1", "repo2", "repo3"]);
    }, 2000);
  });
}

我无法使用getRepositories()函数返回的承诺。以上是我的实现,但它不起作用并返回undefined(而不是 array [repo1, repo2, repo3])。

这是输出:
在此处输入图像描述

我希望数组在记录“Calling Api for Zain”后返回,但undefined它显示在它之前,但我不知道为什么,所以我需要这方面的帮助。

4

2 回答 2

3

您需要在您的第一个 return 声明.then

p.then(user => {
  console.log(user);
  return getRepositories(user.github);
}).then(repos => {
  console.log(repos);
});
于 2020-03-24T18:04:53.567 回答
1
于 2020-03-24T18:17:19.667 回答