2016-12-09 8 views
1

プロミスチェーンで値を渡すときに問題が発生しました。私はCustomerRepoプロミスチェーンの値をハンドラに渡す

に二つの方法
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; 

CustomerRepo

に話しCustomerControllerを持って
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 
} 

getProfilesではconsole.log(CUSTOMERLIST)は、以下の

のように、私が探しています、必要なJSONレスポンスを生成
[{ "CustomerId" : 123, 
    "Name" : "myCustomer", 
    ..... 
    Profiles[{ 
    "profile1" : "myProfile", 
     ..... 
    }] 
] 

しかし、コントローラの私のres.send(customerList)は、プロファイルなしで顧客のみを返しています。問題は基本的に約束の間に値を渡すことです。

+0

実際にあなたが 'send()'関数を呼び出す場所はありません。 – jfriend00

+1

新しい約束で既存の約束事をラッピングするという約束のアンチパターンを避けてください。あなたは、新たに作成された約束でそれをラップするのではなく、すでに持っている約束を返すことができます。あなたはその複数の場所をやっています。 – jfriend00

+0

@ jfriend00、フィードバックのおかげで、申し訳ありませんが、すべてのことに新しいと私はこれに関する記事を読む。私は変更されますが、最初に問題を解決する方法はありません –

答えて

0

sendPayloadが定義されていません。あなたの関数の名前はsendです。それは未定義の関数にデータを渡しています。それはおそらくあなたがそれを見ていない理由です。

+0

こんにちはジョン、コピーして貼り間違えて申し訳ありません、私は郵便を編集し、修正しました。問題はまだ立っている –

関連する問題