如何为性能执行多个异步函数(非嵌套),但等待它们完成再继续
How can I do multiple async functions (not nested) for performance, but wait for them to finish before proceeding
我已经使用Golang
一段时间了,但我喜欢写Javascript,所以我又切换回来了,但是在Golang
你可以使用sync.WaitGroup
来执行多个goroutines
并等待它们完成,例如:
var wg sync.WaitGroup
for _, val := range slice {
wg.Add(1)
go func(val whateverType) {
// do something
wg.Done()
}(val)
}
wg.Wait() // Will wait here until all `goroutines` are done
// (which are equivalent to async callbacks I guess in `golang`)
那么我如何在Javascript(Node)中完成这样的事情。这是我目前正在使用的:
router.get('/', function(req, res, next) {
// Don't want to nest
models.NewsPost.findAll()
.then(function(newsPosts) {
console.log(newsPosts);
})
.error(function(err) {
console.error(err);
});
// Don't want to nest
models.ForumSectionPost.findAll({
include: [
{model: models.User, include: [
{model: models.Character, as: 'Characters'}
]}
]
})
.then(function(forumPosts) {
console.log(forumPosts);
})
.error(function(err) {
console.error(err);
});
// Wait here some how until all async callbacks are done
res.render('index', { title: 'Express' });
});
我不想将每个.findAll()
都嵌套在承诺的回报中,因为这样它们将按顺序和成本性能进行处理。我希望它们一起运行,然后等到所有异步回调完成,然后继续。
您需要使用支持 Promise.all
的库:
router.get('/', function(req, res, next) {
// Don't want to nest
var p1 = models.NewsPost.findAll()
.then(function(newsPosts) {
console.log(newsPosts);
})
.error(function(err) {
console.error(err);
});
// Don't want to nest
var p2 = models.ForumSectionPost.findAll({
include: [
{model: models.User, include: [
{model: models.Character, as: 'Characters'}
]}
]
})
.then(function(forumPosts) {
console.log(forumPosts);
})
.error(function(err) {
console.error(err);
});
Promise.all([p1, p2]).then(function(){
// Wait here some how until all async callbacks are done
res.render('index', { title: 'Express' });
});
});
相关文章:
- 等待函数执行后再继续
- 如何让foreach循环等待$http.get完成后再继续
- 如何在Node.js中等待函数完成后再继续
- 等待AJAX响应后再继续
- 等待 AJAX,然后再继续执行单独的函数
- 使用生成器等待输入,然后再继续 forEach 循环的主体
- 如何使用 JQuery 添加延迟?(让它等待 5 秒再继续)
- 等待多个 ipc 调用完成,然后再继续电子/冗余
- 如何等待findOneAndUpdate完成,然后再继续async.series
- 等待 API 调用在 Javascript 中完成,然后再继续
- Angular2 可观察 - 等待多个函数调用,然后再继续
- 等待方法的响应,然后再继续而不使用 SJAX
- 等待 .each 完成,然后再继续 (jQuery)
- 如何为性能执行多个异步函数(非嵌套),但等待它们完成再继续
- 在JavaScript或Jquery中,让循环等待按钮按下后再继续
- Javascript/jQuery使函数等待回调后再继续
- 等待图像加载后再继续
- 如果我屈服于承诺,它会等待承诺得到解决后再继续吗
- 等待一个函数完成后,再继续使用Javascript或jQuery
- 等待javascript脚本完成后再继续使用Web浏览器?[字幕图像+图片框]