[英]How do I make this function a promise?
我正在使用快遞路線
app.get('/api/users/:username', (req, res) => {
let username = req.params.username;
findUserInApi(username)
.then(foundUser => {
if (foundUser) {
res.status(403).send('User not found in api yet');
}else{
res.json(foundUser);
}
});
});
我希望findUserInApi是一個承諾,因為我需要等待該函數內部發生的提取。
這是findUserInApi
const findUserInApi = (username) => {
findChattersPerRole()
.then(chattersPerRole => {
console.log(`${username} should\'ve been added by now...`);
//console.log(chattersPerRole);
let wantedUser = find(chattersPerRole, {username});
if (!wantedUser) {
console.log(`${wantedUser} wasn't found m8`);
return Promise.resolve(null);
}
console.log('wanteduser is: ', wantedUser);
getUserByUsername(wantedUser.username)
.then(foundUser => {
console.log('founduser is: ', foundUser);
return Promise.resolve(foundUser);
});
});
};
我以前只在找不到時返回null,而在發現他時僅返回foundUser,但是我試圖通過返回Promise.resolve來做出承諾。 我不確定如何解決此問題...
您需要返回整個承諾鏈,如下所示:
const findUserInApi = (username) => {
return findChattersPerRole()
.then(chattersPerRole => {
console.log(`${username} should\'ve been added by now...`);
//console.log(chattersPerRole);
let wantedUser = find(chattersPerRole, {username});
if (!wantedUser) {
console.log(`${wantedUser} wasn't found m8`);
return Promise.resolve(null);
}
console.log('wanteduser is: ', wantedUser);
getUserByUsername(wantedUser.username)
.then(foundUser => {
console.log('founduser is: ', foundUser);
return Promise.resolve(foundUser);
});
});
};
請注意,在return findChattersPerRole().then()
添加了return
。
但是,您正在嵌套承諾鏈。 那是一種反模式。 另外,如評論中所述,您無需在Promise.resolve()
中使用Promise.resolve()
.then()
,它會自動應用。 您的代碼可以重組為如下形式:
const findUserInApi = (username) => {
return findChattersPerRole()
.then(chattersPerRole => {
console.log(`${username} should\'ve been added by now...`);
//console.log(chattersPerRole);
return find(chattersPerRole, {username});
})
.then(wantedUser => {
if (wantedUser) {
console.log('wanteduser is: ', wantedUser);
return getUserByUsername(wantedUser.username);
}
else console.log(`${wantedUser} wasn't found m8`);
})
.then(foundUser => {
if (foundUser) console.log('founduser is: ', foundUser);
return foundUser;
});
};
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.