这是代码
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()
函数返回的promise时遇到麻烦。上面是我的实现,但是不起作用,并且返回undefined
(而不是数组[repo1, repo2, repo3]
)。
我希望数组在记录“ Calling Api for Zain”之后返回,但是前面显示了undefined
,但是我不知道为什么,所以我需要有关此的帮助。
答案 0 :(得分:3)
您的第一个.then
中需要一个return语句:
p.then(user => {
console.log(user);
return getRepositories(user.github);
}).then(repos => {
console.log(repos);
});
答案 1 :(得分:0)
有一种特殊的语法可以更舒适地与promise结合使用,称为“async/await”
。令人惊讶的易于理解和使用。
async function init() {
console.log("Before");
const user = await getUser(1);
console.log(user);
const repos = await getRepositories(user.github);
console.log(repos);
console.log("after");
}
init();
async function getUser(id) {
return new Promise(function(resolve, reject) {
setTimeout(() => {
console.log("Calling a database " + id);
resolve({ id: id, github: "Zain" });
}, 2000);
});
}
async function getRepositories(username) {
return new Promise(function(resolve, reject) {
setTimeout(() => {
console.log(`Calling Api for ${username}`);
resolve(["repo1", "repo2", "repo3"]);
}, 2000);
});
}