Estoy teniendo dificultades con la operación asincrónica de nodo (proveniente de un fondo de PHP). Sé que puedes anidar devoluciones de llamadas, pero eso puede salirse de control muy rápido.
Aquí hay un ejemplo básico que quiero resolver de forma sincrónica (sé que podría ser simple de resolver de forma asíncrona para este ejemplo, pero necesito saber cómo hacerlo de forma sincrónica para proyectos más complicados).
Esta es una aplicación rápida en la que intento contar la cantidad de veces que se usó un cupón:
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); }));El primer rendimiento funciona, pero la parte en la que intento obtener el recuento de todo hace que todo el servidor se cuelgue. ¿Algunas ideas?
olvidó enviar los datos o llamar a continuación, res.send(validCoupons) al final de su función. Deberías hacerlo