NodeJS服务器挂起而不是超时,此后没有响应

时间:2018-04-13 02:52:29

标签: node.js express async-await keystonejs

我的NodeJS服务器已经冻结,没有返回任何类型的错误。

请参阅附件中的详细信息。

最近大规模转向异步/等待模式,我认为这可能是导致此问题的原因。写了所有异步/等待这样的:

// PostController.js
view.on('init', async (next) => {
    try {
        const promises = [
            Post.model.fetchDetail(req.params.post),
            Treatment.model.fetchTreatmentCategories(),
            User.model.fetchMostViewedDoctors(),
        ];

        const [
            post,
            categories,
            doctors,
        ] = await Promise.all(promises);

        locals.data.post = post;
        locals.data.categories = categories;
        locals.data.doctors = doctors;

        if (post && post.tags) {
            locals.data.relatedQuestions = await Question.model.fetchRelatedQuestions(post.tags);
        }
    } catch (err) {
        console.error(err);
    }
    next();
});

还将unhandledRejection事件监听器放在我的应用程序的init文件中

process.on('unhandledRejection', error => {
    console.log('unhandledRejection', error, error.message);
});

enter image description here

1 个答案:

答案 0 :(得分:0)

基本上,有一些方法可以在JavaScript中处理异步:

  1. 回调
  2. 承诺
  3. 发电机
  4. Async / Await(ES7功能)
  5. 在您的代码中,您在async/await内使用callback功能。因此,您在上面的列表中混合方法1和方法4。我不认为这是最好的主意。如需简要比较,请查看this link