【问题标题】:Synchronously call function with return value同步调用带返回值的函数
【发布时间】:2018-02-09 17:24:01
【问题描述】:

我正在尝试在我的 express node.js 应用程序中制作翻译助手。 我已经制作了一个在 views 上运行良好的把手助手,但我正在尝试制作一个可以在我的 控制器 中运行的助手。 我希望它是同步的

我不想要这个:

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

我的助手翻译应该是什么样子的?

【问题讨论】:

  • 解决这个问题的方法是众所周知的。承诺。
  • 你可以在 nodejs 8+ 中使用 async/await
  • 承诺一切都是解决方案
  • 我试着做这样的事情:pastebin.com/hRNs9X2N 没用。提示/帮助?

标签: javascript node.js synchronization return


【解决方案1】:

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

【讨论】:

  • 非常感谢。结论:我没有在 Translator 之前添加 await,也没有创建一个函数,我在哪个范围内使用 await,async。再次感谢您。
猜你喜欢
  • 2019-02-27
  • 2015-08-24
  • 1970-01-01
  • 2019-09-30
  • 1970-01-01
  • 2020-12-18
  • 2019-04-06
  • 2023-02-10
  • 1970-01-01
相关资源
最近更新 更多