我对编码非常陌生,这是我在这里的第一篇文章。我的学习项目是一个网站,该网站使用外部CRM存储来自Web表单的客户数据。
我的存储部分工作正常,但是无法弄清楚如何检索数据并将其传递给呈现的页面。 我需要一条路线来执行3个操作,每个操作本身都能正常工作,我只是想不出如何嵌套它们以便它们按顺序发生。
var options = { method: 'GET',
url: 'https://crm.com/dev/api/opportunity/' + req.params.id,
headers:
{ 'cache-control': 'no-cache',
'content-type': 'application/json',
accept: 'application/json',
authorization: 'Basic xxx' },
json: true };
request(options, function (error, response, body) {
if (error) throw new Error(error);
return body.contact_ids;
});
这将返回与交易相关的客户编号数组。
遍历客户端编号以从每个客户端中查找数据,并将其放入数组。我在函数范围之外定义了一个名为data的空数组,以捕获结果。
resultFromAboveRequest.forEach(function(id) {
var options = { method: 'GET',
url: 'https://crm.com/dev/api/contacts/' + Number(id),
headers:
{ 'cache-control': 'no-cache',
'content-type': 'application/json',
accept: 'application/json',
authorization: 'Basicxxx' },
json: true };
request(options, function (error, response, body) {
if (error) throw new Error(error);
data.push(body);
});
});
将结果数据数组呈现在页面上
res.render("./applicants/resume", {data: data});
我很确定这是对诺言的工作,但是我似乎无法理解语法。任何帮助将不胜感激,对于这个问题的格式是业余的还是某种程度上的不当,我深表歉意。
答案 0 :(得分:0)
我建议使用workoutExercises
库(这是request-promise
库的Promise接口),然后使用Promise在一系列异步操作中管理排序和错误处理。您可以这样做:
request
以下是步骤的一般说明:
const rp = require('request-promise');
const options = {
method: 'GET',
url: 'https://crm.com/dev/api/opportunity/' + req.params.id,
headers: {
'cache-control': 'no-cache',
'content-type': 'application/json',
accept: 'application/json',
authorization: 'Basic xxx'
},
json: true
};
rp(options).then(body => {
return Promise.all(body.contact_ids.map(id => {
const options = {
method: 'GET',
url: 'https://crm.com/dev/api/contacts/' + Number(id),
headers: {
'cache-control': 'no-cache',
'content-type': 'application/json',
accept: 'application/json',
authorization: 'Basicxxx'
},
json: true
};
return rp(options);
}));
}).then(data => {
res.render("./applicants/resume", {data: data})
}).catch(err => {
console.log(err);
res.status(500).send("internal server error");
});
处理程序以获取结果。.then()
处理结果。.map()
回调中,从调用中为每个数据项返回另一个promise。这意味着.map()
将返回一个promise数组。.map()
,以了解它们何时完成。Promise.all()
返回承诺,以便将其链接到先前的Promise.all()
处理程序进行排序。.then()
处理程序中(直到之前的两个操作都完成后才会调用),您将以适当的顺序从.then()
操作中获取数据,可以使用呼叫.map()
。res.render()
来捕获Promise链中的任何错误(那里的所有错误都将传播到此.catch()
,您可以在其中发送错误响应)。