末日金字塔
我有这个路由代码到一个node.jsexpression式应用程序,我试图用q
来使用承诺,而不是进入“callback地狱”。 我在上面包含了一个“服务层”,并且需要进行两个调用,并从两个函数返回一个带有数据的json结构。
var express = require('express'); var q = require('q'); var service = require('./../model/service'); var router = express.Router(); router.get('/trips', function(req, res, next) { service.getAllTrips(function(err, trips) { if (err) throw err; service.getPeopleForTrips(function(err, people) { if (err) throw err; var json = { trips: trips, people: people }; return res.json(json); }); }); }); module.exports = router;
我已经尝试将这两个服务调用分离成这个q
例子在这里显示的内容,但是仍然无法使它工作或者如何构造这个例子。 我在这里先向您的帮助表示感谢。
这是我试过的:
q.fcall(service.getAllTrips) .then(service.getPeopleForTrips) .then(function (data1, data2) { console.log(data1); console.log(data2); }) .catch(function (error) { console.log(error); }) .done();
您可以使用q.nfcall()
作为以cb(err, result)
格式进行callback的节点样式函数。 顺序forms:
var trips; q.nfcall(service.getAllTrips) .then(function(data){ trips= data return q.nfcall(service.getPeopleForTrips) }) .then(function (people) { console.log(trips, people); }) .catch(function (error) { console.log(error); }) .done();
使用q.all
你可以并行地运行promises数组,然后使用q.spread
来传递返回的数组作为履行处理函数的参数:
q.all([ q.nfcall(service.getAllTrips), q.nfcall(service.getPeopleForTrips) ]).spread(function(trips, people){ console.log(trips, people); }) .catch(function (error) { console.log(error); }) .done();
- 为什么我的节点expression.post被多次调用,而我的res.send()永远不会parsing$ http请求?
- Node JS + Express:在主视图中渲染子视图
- node.jscallback中的“完成”和“下一个”之间的区别
- Node.js,Express和dependency injection
- 我怎样才能传递参数“用户名”到“/”路由器与快递?
- node-sass-middleware只提供一次css文件
- NodeJS中的window.locaton和window.pathname等效
- 使用webpack-dev-server运行节点快速服务器
- 我怎样才能从一个长期的asynchronous过程接收实时更新?