プロミスチェーンで値を渡すときに問題が発生しました。私は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)は、プロファイルなしで顧客のみを返しています。問題は基本的に約束の間に値を渡すことです。
実際にあなたが 'send()'関数を呼び出す場所はありません。 – jfriend00
新しい約束で既存の約束事をラッピングするという約束のアンチパターンを避けてください。あなたは、新たに作成された約束でそれをラップするのではなく、すでに持っている約束を返すことができます。あなたはその複数の場所をやっています。 – jfriend00
@ jfriend00、フィードバックのおかげで、申し訳ありませんが、すべてのことに新しいと私はこれに関する記事を読む。私は変更されますが、最初に問題を解決する方法はありません –