{
id: String,
comments: [String], # id of Comments
links: [String], #id of Links
}
按ID找到一个有评论和链接属于它的帖子:
Posts.findOne({id: id}, function(post) {
Comments.find({id: post.id}, function(comments) {
Links.find({id: post.id}, function(links) {
res.json({post: post, comments: comment, links: links})
})
})
})
如何使用Promise(http://mongoosejs.com/docs/promissies.html)避免回拨地狱?
var query = Posts.findOne({id: id});
var promise = query.exec();
promise.then(function (post) {
var query1 = Comments.find({id: post.id});
var promise1 = query1.exec();
promise1.then(function(comments) {
var query2 = Links.find({id: post.id});
var promise2 = query2.exec();
promise2.then(function(links) {
res.json({post: post, comments: comment, links: links})
})
})
});
好像不好......
尝试以下内容:
function getPost(id) {
return Post
.findOne({id: id})
.then( post => {
return post;
});
}
使用Q模块
function getCommentsAndLinks(post) {
return Q.all([
Comment.find({id: post.id}),
Links.find({id: post.id})
])
.done( results => {
let comments = results[0];
let links = results[1];
return [post, comments, links];
})
.catch( err => {
// handle err
})
在控制器上
getPost(postId)
.then(getCommentsAndLinks)
.then( results => {
let post = results[0];
let comments = results[1];
let links = results[2];
// more code here
})
.catch( err => {
// handle err
})
Post
.findOne({id: id})
.populate('comments')
.populate('links')
.then( post => {
// here have the post with data of comments and links
});
本文向大家介绍如何避免回调地狱?相关面试题,主要包含被问及如何避免回调地狱?时的应答技巧和注意事项,需要的朋友参考一下 你可以有以下方式避免回调地狱 模块化:将回调函数转换为独立的函数 使用流程控制库,例如[aync] 使用Promise 使用aync/await 使用来计算生成器或Promise 解析:这个问题有很多种答案,取决你使用的场景,例如ES6, ES7,或者一些控制流库。
问题内容: 当我打开多个流并且必须获得一个绝对事件来完成逻辑时,如何避免使用类似递归的结构。 我有几个文件必须通过tp进行一些处理。如何设置一个事件,告诉我所有这些事件何时完成?目前,我得到的是每个事件都是单独的。 我绝对可以同时开始每个视频流。我只需要以某种方式收集结局? 我可以为每个事件调用一个函数调用并对其进行计数……虽然听起来很hacky? 我觉得有办法兑现诺言,但我不知道怎么做。 问题答
我有以下代码。 HTML
本文向大家介绍如何解决异步回调地狱?相关面试题,主要包含被问及如何解决异步回调地狱?时的应答技巧和注意事项,需要的朋友参考一下 参考回答:
问题内容: 在下面的代码中,我是否处于回调状态?如何在不使用纯JavaScript的异步模块的情况下克服这种情况? 上面的代码被复制到多个位置以使代码按预期工作。 问题答案: 是的,您处于回调地狱。假设您不想使用异步的解决方案(我怀疑您可以证明除偏见之外的其他理由)包括: 1 )进行更多顶级功能。根据经验,每个功能应执行1或2个IO操作。 2 )调用这些函数,使您的代码遵循由一小部分控制流“胶水”
问题内容: 我正在使用以下代码通过AJAX提交表单: 背景 我的PHP处理程序执行各种任务,然后发回响应。然后,我可以在成功或错误函数中执行某些操作。 我的问题 当用户双击表单的“提交”按钮时,将发生两次AJAX调用,这将导致我的PHP处理程序中的代码执行两次。 我的问题 如果用户双击提交,如何避免我的代码执行两次? 问题答案: 当AJAX调用再次出现时,请先禁用首次单击的“提交”按钮,然后重新启