2016-11-22 45 views
0

我是js中的新手。在我的项目中,我使用的是mysql和node js。 控制器中的某处我需要从不同型号获取一些数据。在PHP中,它看起来像节点js正确的代码方式(范围)

function some() { 
    $user = $user->getOne($id); 
    $photos = $photos->getOne($user->id); 
    $posts = $post($user->id, $photo->uid) 
} 

,我有这一切变量模型的节点JS结果一个范围 是异步,所以它看起来像嵌套回调。 短例如

UserModel.findbyid(result.user_id, function (err, user_data) { 
 
    PhotoModel.GetVoteCount(user_data.id, result.id, function (res_count) { 
 
    PhotoModel.getWinners(function (err, winners_ar) { 
 
     PhotoModel.getweekusers(1, function (result_week) { 
 
     response.render('one.twig', { 
 
      view_user: request.user, 
 
      image: result, 
 
      p_user: user_data, 
 
      count: res_count, 
 
      winners: winners_ar, 
 
      week_users: result_week['photos'] 
 
     }); 
 
     }); 
 
    }) 
 
    }); 
 
});
所以我嵌套的回调,我觉得这是不正确的代码的方式,你能解释一下最佳实践?

+0

'write'或'right'? – Rajesh

+0

这是JavaScript编码的正确方法:)你可以查看这篇博文,例如http://www.joshwright.com/tips/javascript-christmas-trees-promises-and-event-emitters,如果你是Google Doom JavaScript'的圣诞树,你会发现一些很好的文章,将解释为什么这是,以及如何使用它:) –

回答

0

你可以看看async module

这简化了你所说的“回调地狱”通过一些功能,可以帮助创建异步代码流。

具体到你的情况 - async.waterfall会做的伎俩

0

使用承诺,或将帮助您使用承诺的库。