如何将回调地狱重写为承诺
how to rewrite callback hell into promise?
我的回调地狱路由工作正常…
var myCallbackHell = router.route('/');
myCallbackHell.get(function(req, res, next) {
bookModel.find({title: "Animal Farm"}).then(function(book) {
movieModel.find({title: "Intouchables"}).then(function(movie) {
gameModel.find({title: "The Last of Us"}).then(function(game) {
res.render('index', {book_found: book, movie_found: movie, game_found: game});
});
});
});
});
然而,我想用承诺。有什么帮助吗?
您可以使用Promise.all
并编写相同的内容,如下所示
var promises = [
bookModel.find({title: "Animal Farm"}),
movieModel.find({title: "Intouchables"}),
gameModel.find({title: "The Last of Us"})
];
Promise.all(promises).then(function(values) {
res.render('index', {book_found: values[0], movie_found: values[1], game_found: values[2]});
}).catch(function(err) {
// deal with err
});
ES2017有async/await语法
防止诺言地狱
var myCallbackHell = router.route('/');
myCallbackHell.get( async function(req, res, next) {
var book = await bookModel.find({title: "Animal Farm"})
var movie = await movieModel.find({title: "Intouchables"})
var game = await gameModel.find({title: "The Last of Us"})
res.render('index', {book_found: book, movie_found: movie, game_found: game});
})
您应该捕获错误和拒绝,因此:
router.get('/', async function(req, res, next) {
try {
var book = await bookModel.find({title: "Animal Farm"})
var movie = await movieModel.find({title: "Intouchables"})
var game = await gameModel.find({title: "The Last of Us"})
res.render('index', {book_found: book, movie_found: movie, game_found: game})
} catch (e) { next(e) }
})
相关文章:
- 我的职位回报太快了,如何做出承诺
- 打破承诺链的好方法是什么
- 从函数返回角度承诺
- 如何重写下面的函数,使其不会't用于循环
- 我怎样才能获得承诺的价值
- 延期承诺值未更新/解析/延期
- 在承诺链中处理早期回报的最佳方式
- 承诺在非节点式回调上使用Bluebird
- 重写CSS:使用jquery显示none属性
- 简单的ES6承诺问题-交换解决和拒绝参数
- 组合承诺和非承诺值
- 带有对象/原型的链式承诺(Q延期)
- AngularJS$q承诺使用socket.io
- React JS:未捕获(在承诺中)语法错误:在位置 0 的 JSON 中意外<令牌
- 当一些承诺失败时,如何继续使用$q.all()
- Nodejs和express路由,如何处理客户端的承诺
- 重写需要javascript中带有import关键字的语法
- 重写这个弗兰肯斯坦承诺链
- 我怎能用承诺重写这一切
- 如何将回调地狱重写为承诺