【发布时间】:2019-01-02 02:25:47
【问题描述】:
问:我了解如何在 request 中返回一个承诺,但是如何在另一个请求中的 请求中返回一个新的承诺?
我的代码:
request({ // --------------request 1------------
url: request_data.url,
method: request_data.method,
form: request_data.data,
headers: oauth.toHeader(oauth.authorize(request_data, token))
}, function (err, res, body) {
body = JSON.parse(body);
var count = 0;
for (var i = 0; i < body.items.length; i++) {
if (body.items[i].name.toLowerCase().indexOf(params.name.toLowerCase()) >= 0) {
ids[count] = body.items[i].id;
count++;
}
}
return new Promise((resolve, reject) => {
request({ **request 2** ------------request 2--------------
url: request_data2.url,
method: request_data2.method,
form: request_data2.data,
headers: oauth.toHeader(oauth.authorize(request_data2, token))
}, function (err2, res2, body2) {
body2 = JSON.parse(body2);
var counts = 0;
var ret = {};
//console.log(ids[0]);
for (var i = 0; i < body2.items.length; i++) {
//console.log(body2.items[i].name);
for (var y = 0; y < body2.items[i].custom_attributes.length; y++) {
if (body2.items[i].custom_attributes[y].attribute_code == 'category_ids') {
if (ids[0] == body2.items[i].custom_attributes[y].value) {
ret[counts] = body2.items[i].name;
counts++;
}
}
}
} //------- resolve / reject ----------
if (err) {
reject({
statusCode: 500,
headers: { 'Content-Type': 'application/json' },
});
} else {
resolve({
body: JSON.parse(ret),
})
}
});
});
});
当我只有一个请求时,输出有效。但是当一个请求中有另一个请求时,当我尝试调用这个函数时,我会收到一个空输出{}。
【问题讨论】:
-
Promise 被引入以防止回调地狱和扁平化回调层次结构。你并没有真正使用它们。我建议首先切换到
request-promise,这将有助于保持正确。 -
仍然不确定如何在 2 个请求中使用 request-promise
-
Promise 应该与
then链接。您可以使用 async..await 来简化此操作。
标签: arrays json node.js promise request