NodeJS / Express中的同步像编程一样

我很难与节点asynchronous操作(来自PHP背景)。 我知道你可以嵌套callback,但可以很快失控。

这是我想要同步解决的一个基本示例(我知道这个示例可能很简单,但是我需要知道如何同步执行更复杂的项目)。

这是一个快速的应用程序,我试图计算优惠券已被使用的次数:

var express = require('express'); var wrap = require('co-express'); app.post('/grab-valid-coupons', wrap(function* (req, res) { var validCoupons = []; console.log('grabbing coupons'); var coupons = yield db.collection('Coupons').find({}).toArray(); coupons.forEach(wrap(function* (coupon, index) { console.log(coupon.code, 'CODE'); var couponUse = 0; couponUse += yield db.collection('Rentals').find({coupon: coupon.code}).count(); couponUse += yield db.collection('Orders').find({coupon: coupon.code}).count(); console.log(couponUse); if(couponUse < coupon.uses) { validCoupons.push(coupon); } })); res.json(validCoupons); })); 

第一个收益是正在工作,但我试图得到所有东西的计数部分导致整个服务器挂起。 有任何想法吗?

你忘了发送数据或者在你的函数结尾处调用res.send(validCoupons) 。 应该这样做