我是async函式的新手,我正在嘗試連鎖一些函式,但我不明白為什么我不能回傳最后的呼叫
var container = { Login: ''/span>, sign_up_text: ''/span>, forget_password: '', login_button: '' }
var lang = 'de-DE'/span>
var langID = 1
async function getVars (key, lang){
return db.localization.findOne({
where: {
key: key,
lang: lang
}
})
}
async function getLangID (lang){
return db.localGroups.findOne({ where: {
i10s: lang
},
attributes: ['id'] 。
})
}
async function getLocalvars (container, lang){
var newcontainer = container
for (let key in container) {
console.log(lang)
await getVars(key, lang)
.then(data => {
newcontainer[data.key] = data.value。
})
}
return newcontainer;
}
async function desprate(){
getLangID(lang)
.then(langdata => {
getLocalvars(container, langdata.id)
.then(data => {
console.log(data)。
return data;
})
})
}
console.log(desprate()) 。
在日志中甚至沒有顯示出一個承諾;(
)謝謝你!
uj5u.com熱心網友回復:
我會給它一個機會。我還沒有測驗過,但我會試著在評論中指出關鍵的概念。
var container = {
Login: ''。
sign_up_text: '',
forget_password: '',
login_button: ''。
};
var lang = 'de-DE'/span>;
var langID = 1;
async function getVars(key, lang) {
return db.localization.findOne({
where: {
key: key,
lang: lang,
},
});
}
async function getLangID(lang) {
return db.localGroups.findOne({
where: {
i10s: lang,
},
attributes: ['id']。
});
}
async function getLocalvars(container, lang) {
var newcontainer = container;
//由于你正在迭代一個物件,你將不得不等待回圈中產生的所有承諾。
await Promise.all(
Object.keys(container).map(async(key)=> {
const data = await getVars(key, lang)。
//由于這是一個異步函式,你可以直接等待它,而不是用then鏈接它。
newcontainer[data.key] = data.value。
})
);
return newcontainer。
}
async function desprate() {
//讓我們在這里再次利用async/await的優勢。
const langdata = await getLangID(lang)。
const data = await getLocalvars(容器,langdata.id)。
console.log(data)。
return data;
}
console.log(desprate()) 。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/317610.html
標籤:
上一篇:回呼不是異步庫中的一個函式
