JS承诺 – 使这个承诺嵌套更有效的方法?
考虑这段代码:
WordPress.getMediaById(res.data.featured_media) .then(function (res) { post.featuredMedia = res.data.source_url; WordPress.getUserById(post.authorId) .then(function (res) { post.authorName = res.data.name; $scope.post = { title: post.title, introAsHtml: post.introAsHtml, authorName: post.authorName, contentAsHtml: post.contentAsHtml, featured_media: post.featuredMedia }; }); });
有什么办法可以使它在嵌套方面更有效率? 在将来,我会想添加更多的承诺function,我不知道是否是正确的方式,否则,它是如何真正不同于callback…
问候。
除非第二个asynchronous请求不依赖于第一个调用的结果,否则我绝对不会嵌套这个promise。
借助于$q
的angular度,你可以这样做:
$q.all([ WordPress.getMediaById(mediaId), WordPress.getUserById(userId)]) .then(response => { post.featuredMedia = response[0].data.source_url; post.authorName = response[1].data.name; $scope.post = { title: post.title, introAsHtml: post.introAsHtml, authorName: post.authorName, contentAsHtml: post.contentAsHtml, featured_media: post.featuredMedia }; });
你可以像这样减less嵌套:
WordPress.getMediaById(res.data.featured_media) .then(function (res) { //res.data is media post.featuredMedia = res.data.source_url; return WordPress.getUserById(post.authorId); }).then(function (res) { //res.data is user post.authorName = res.data.name; $scope.post = { title: post.title, introAsHtml: post.introAsHtml, authorName: post.authorName, contentAsHtml: post.contentAsHtml, featured_media: post.featuredMedia }; });
有关承诺的更多信息和明确的解释,请阅读Nolan Lawson的博客
- 无法用Express + jade + angular查找视图
- 使用Socket.io,Angular,JWTvalidation数据直到用户validation刷新后才可用
- 如何结合快递和angular度路线
- 什么是使用客户端路由的正确方法?
- Angular-Google-Maps库不加载
- 我怎么能在angularjs中的服务的两个function之间传递数据
- 使用Amazon Dynamo DB进行不区分大小写的查询
- Passport AngularJS ExpressJS:Access-Control-Allow-Origin不允许Origin null
- 是否可以将EJSvariables传递给Angular ng-repeatfilter?