同步调用具有返回值的函数

时间:2018-02-09 17:24:01

标签: javascript node.js synchronization return

我正在尝试在我的express node.js应用程序中创建一个翻译助手。 我已经制作了一个在视图上工作得很好的把手助手,但是我试图制作一个可以在我的控制器中使用的把手。 我希望它是同步

我不想要这个:

var word = helpers.Translator('keyWord1', 'en');
return res.render("page", { word: word });

我想要这个:

var error = helpers.Translator('keyWord2', 'en');
return res.json({OK:false, error: error});

原因是因为我想把这个单词作为一个字符串,所以我可以将它作为json返回到页面,当处理ajax POST / GET上的错误时:

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 });
        });
    });
});

有时我需要返回多个翻译的单词,我绝对想要这样做:

{{1}}

我的助手翻译器应该如何?

1 个答案:

答案 0 :(得分:2)

你可以做的是让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;
  }
}