Node.JS - 承诺异步/等待示例

时间:2017-07-29 01:56:57

标签: javascript node.js asynchronous promise async-await

我目前有一个利用原生Promise的项目。我希望将这些Promises迁移到Async / Await。我有麻烦将他们迁移过来;我正在尝试关注this文章。下面是带有Promises的当前代码,需要更改为Async / Await。

routes.js

// Importing user information
import user from '../server-controllers/user';

// User Information Route
router.get('/about', (req, res) => {
  user.profile().then((data) => {
    return res.render('user', {
      title: data,
    });
  }).catch((e) => {
    res.status(500, {
      error: e,
    });
  });
});

user.js的

/*
This file contains any server side modules needed.
*/

module.exports = {
// Returns information about a user
  profile: () => {
    return new Promise((resolve, reject) => {
      const user = "John Doe";
      resolve(user);
    });
  },
};

如果有任何帮助,我需要做些什么来转换这些将有所帮助。我不知道代码是否需要更改routesuser文件(或两者)。

我在终端中收到的错误是[object Error] { ... }

1 个答案:

答案 0 :(得分:4)

关于asyncawait要记住的关键是async函数实际上只是一个返回Promise的函数,并允许您使用{{1}解决await的问题。因此,当Promise拒绝时,如果Promise被拒绝,那么在await所在的任何地方都会出现错误。

从技术上讲,如果您想使用await / async语法,则不需要 来更改await。您可以将user.js更改为:

routes.js

但是当您使用// Importing user information import user from '../server-controllers/user' // User Information Route router.get('/about', async (req, res) => { try { const data = await user.profile() return res.render('user', { title: data }) } catch (error) { // Runs if user.profile() rejects return res.status(500, {error}) } }) 函数时,user.js 更简洁:

async