Вам просто нужно правильно использовать .then, а не отбрасывать результат первого запроса
const request = require('request-promise');
const getInfo = (uri) => {
// Return new promise
return request({
method: 'GET',
uri: uri,
json : true,
headers: {
'User-Agent': 'Request-Promise'
}
});
}
// using promise.then
const result = (url1, url2) => getInfo(url1)
.then(val1 => getInfo(url2)
.then(val2 => val1.array.concat(val2.array))
);
// or async/await
const result = async (url1, url2) => {
const val1 = await getInfo(url1);
const val2 = await getInfo(url2);
return val1.array.concat(val2.array);
};
// both requests done at the same time
const result = (url1, url2) => Promise.all([
getInfo(url1),
getInfo(url2)
]).then(([val1, val2]) => val1.array.concat(val2.array));
export result;
// использование
const fn = require("./module.js"); // whatever you call the above file
fn("url1", "url2").then(result => {
// use result here
});
Для объяснения каждого воплощения result
- может быть проще написать это, используя обычные функции, чтобы я мог добавлять комментарии
const result = function(url1, url2) {
return getInfo(url1)
.then(function(val1) {
return getInfo(url2)
.then(function(val2) {
return val1.array.concat(val2.array));
})
})
}
Обычно вы пытаетесь избежать "вложения". Таким образом, но так как конечный результат требует как val1, так и val2,это неизбежно (не совсем, но, допустим, так оно и есть)
Здесь сияет асинхронность / ожидание
const result = async (url1, url2) => {
const val1 = await getInfo(url1);
const val2 = await getInfo(url2);
return val1.array.concat(val2.array);
};
Нет необходимости даже переписывать это, потому что это понятно!
Однако вы хотите запустить Parallel
const result = (url1, url2) => Promise.all([
getInfo(url1),
getInfo(url2)
]).then(([val1, val2]) => val1.array.concat(val2.array));
Promise.all принимает массив обещаний и возвращает обещание, которое разрешается в массив разрешенных результатов
([val1, val2]) => //rest of code
в случае, если вы не знали, это как
(results => {
let val1 = results[0];
let val2 = results[1];
// rest of code
Итак, это должно быть довольно легко понять, как это