簡體   English   中英

具有返回值的同步調用函數

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM