我是 Node 的新手,我在這里嘗試做的是在頁面呈現之前呼叫一個函式,但我的函式在我的頁面呈現后作業,我無法從另一個函式獲取資料。
exports.getCity = (req, res) => {
controlCity(req.params.city).then((control) => {
res.render('index.ejs', control);
})
}
const controlCity = async (cityStub) => {
return new Promise((resolve, reject) => {
City.findAll({ where: { SEHIRSTUB: cityStub } })
.then(
city => {
if (city.length === 0) { // when it comes here it works
resolve({ value: "test" });
}
else {
resolve(controlPredictedWeather(city[0]));
}
}).catch(err => console.log(err));
}
)
}
const controlPredictedWeather = city => {
Predicted_Weather.findAll({ where: { CITYID: city.ID } }).then(
degree => {
if (degree.length === 0) {
return (getPredictedWeather(city)); // it goes another function
}
else {
console.log({ value: degree[0], city: city });
return { value: degree[0].degree, city: city };
}
}
).catch(err => console.log(err))
}
我怎么解決這個問題?
uj5u.com熱心網友回復:
問題是你沒有在controlPredictedWeather函式中回傳任何東西
const controlPredictedWeather = city => {
// vvv added return here
return Predicted_Weather.findAll({ where: { CITYID: city.ID } }).then(
degree => {
if (degree.length === 0) {
return (getPredictedWeather(city)); // it goes another function
}
else {
console.log({ value: degree[0], city: city });
return { value: degree[0].degree, city: city };
}
}
).catch(err => console.log(err))
}
解決了這個問題,現在你可以解決房間里的大象了
- 你有一個
async沒有的功能await - 您正在使用 Promise 建構式反模式 - 即
new Promise從不需要它的地方
由于您使用async了關鍵字,這表明您希望使用更易于閱讀async/await使用 Promises 的模式
那么,為什么不充分利用它
像這樣
exports.getCity = async (req, res) => {
const control = await controlCity(req.params.city);
res.render('index.ejs', control);
};
const controlCity = async (cityStub) => {
try {
const city = await City.findAll({ where: { SEHIRSTUB: cityStub } });
if (city.length === 0) { // when it comes here it works
return { value: "test" };
}
// no need for else since returning above
return controlPredictedWeather(city[0]);
} catch(err) {
console.log(err);
}
};
const controlPredictedWeather = async (city) => {
try {
const degree = await Predicted_Weather.findAll({ where: { CITYID: city.ID } });
if (degree.length === 0) {
return (getPredictedWeather(city)); // it goes another function
}
// no need for else since returning above
console.log({ value: degree[0], city: city });
return { value: degree[0].degree, city: city };
} catch(err) {
console.log(err)
}
};
當然,房間里還剩下一頭大象,那control就是
res.render('index.ejs', control);
將是undefined如果任何一個.findAlls 拋出錯誤 - 在您的原始代碼中也是如此,只是想我會提到
uj5u.com熱心網友回復:
嘗試 async/await 語法,它更簡單。
async function fn() {
try {
let res = await response();
doSomthingWith(res);
}
catch(e) {
console.log('Error!', e);
}
}
fn();
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/531238.html
