2016-12-09 2 views
1

Fehler beim Übergeben von Werten in der Versprechungskette. Ich habe einen CustomerController dieÜbergabe des Werts in der Versprechungskette an die Handler

var express = require('express')(); 
var customerRepo = require('../repositories/customerRepo'); 

var customerController = function() { 
var get = function (req, res) { 
    if (typeof(req.query.offset) === 'undefined' ||  typeof(req.query.return) === 'undefined') 
     res.status(422).send({'message': 'missing paging parameters'}); 

    req.query.offset === '' ? req.query.offset = 0 : req.query.offset; 
    req.query.return === '' ? req.query.return = 50 : req.query.return; 

    let getCustomers = customerRepo.getCustomers(req.query.offset, req.query.return); 
    let getProfiles = customerRepo.getProfiles(customerList); 
    let sendPayLoad= function (customerList) { 
     console.log(customerList); ///// <=============== 
     res.send(customerList); 
    } 

    getCustomers 
     .then(getProfiles) 
     .then(sendPayLoad) 
     .catch(function (err) { 
      res.status(500).send(err); 
     }) 
    } 
    return { 
    get: get 
    } 
} 
module.exports = customerController; 

die beiden Methoden in CustomerRepo

var getCustomers = function (offset, _return) { 
    return new Promise(function (resolve, reject) { 
    { 
     var customers = []; 
     var sql = 'sql here'; 
     SqlQuery(sql) 
      .then(function (rows) { 
       for (var i = 0; i < rows.length; i++) { 
        var customer = new Customer(); 
        customer = rows[i]; 
        customers.push(customer); 
       } 
       resolve(customers[0]); 
      }) 
      .catch(function (err) { 
       reject(err); 
      }) 
    } 
    }); 
} 

var getProfiles = function (customers) { 
    return new Promise(function (resolve, reject) { 
    let ids = customers.map(function (item) { 
     return item.CustomerId; 
    }); 
    var customerList = []; 
    let sql = 'sql here'; 
    SqlQuery(sql) 
     .then(function (rows) { 
      // do some processing to extract profile data from rows 
       and push to customerList so my profiles can be retrieved   like customers[0].Profiles 
      console.log(customerList);///// <=============== 
      resolve(customerList); 
      return customerList; 
     }) 
     .catch(function (err) { 
      reject(err); 
     }) 
    }); 
} 

module.exports = { 
    getCustomers: getCustomers, 
    getProfiles: getProfiles 
} 

console.log (Kundenliste) in getProfiles erzeugt die erforderliche json Antwort die ich suche nach CustomerRepo spricht, wie die unten

[{ "CustomerId" : 123, 
    "Name" : "myCustomer", 
    ..... 
    Profiles[{ 
    "profile1" : "myProfile", 
     ..... 
    }] 
] 

aber meine res.send (customerList) in der Steuerung gibt nur den Kunden ohne die Profile zurück. Das Problem besteht im Wesentlichen darin, Werte zwischen Versprechen zu vermitteln.

+0

Ich sehe keinen Ort, den Sie tatsächlich Ihre 'send()' Funktion nennen. – jfriend00

+1

Bitte vermeiden Sie die Verheißung Anti-Pattern des Einwickelns eines bestehenden Versprechens in ein neues Versprechen. Sie können das Versprechen, das Sie bereits haben, einfach zurückgeben, anstatt es in ein neu erstelltes Versprechen einzufügen. Du machst das mehrere Orte. – jfriend00

+0

@ jfriend00, vielen Dank für die Rückmeldung, Entschuldigung neu an der ganzen Sache und ich habe einen Beitrag diesbezüglich gelesen. Ich werde ändern, aber zuerst nicht, wie das Problem zu lösen –

Antwort

0

sendPayload ist nicht definiert. Ihre Funktion heißt senden. Es übergibt die Daten an eine undefinierte Funktion. Das ist wahrscheinlich der Grund, warum du es nicht siehst.

+0

Hallo John, Sorry, das war Kopieren und Einfügen Fehler, habe ich den Beitrag bearbeitet und korrigiert. Das Problem besteht immer noch –

Verwandte Themen