[英]Synchronously call function with return value
我正在嘗試在我的Express Node.js應用程序中提供翻譯助手。 我已經制作了一個可以在視圖上正常工作的車把助手,但是我正在嘗試制作一個可以在我的控制器中工作的助手。 我希望它是同步的 。
我不想要這樣:
helpers.Translator('keyWord1', 'en', function(err, word){
return res.render("page", { word: word });
});
我要這個:
var word = helpers.Translator('keyWord1', 'en');
return res.render("page", { word: word });
原因是因為在處理ajax POST / GET上的錯誤時,我想將單詞作為字符串獲取,所以可以將其作為json返回到頁面:
var error = helpers.Translator('keyWord2', 'en');
return res.json({OK:false, error: error});
有時候,我需要返回多個翻譯過的話,我絕對不希望這樣做:
helpers.Translator('keyWord1', 'en', function(err, word1){
helpers.Translator('keyWord2', 'en', function(err, word2){
helpers.Translator('keyWord3', 'en', function(err, word3){
return res.render("page", { word1: word1, word2: word2, word3:word3 });
});
});
});
我的助手Translator應該是什么樣?
您可以做的是helpers.Translator
是一個新的承諾,例如:
Translator (keyword, lng) {
return new Promise((resolve, reject) => {
...
resolve()
reject()
})
}
因此,當您調用幫助程序時,可以使用async / await執行以下操作:
async function myFunction () {
try {
const word = await helpers.Translator('keyWord1', 'en');
const word2 = await helpers.Translator('keyWord2', 'en');
return res.render("page", { word, word2 }); // this is equal to ("page", { word: word, word2: word2 })
} catch (err) {
throw err;
}
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.