2016-11-08 12 views
0

我想问约request-promise.js。我没有解决许多网址的呼叫链承诺,因为我不知道如何在相同的承诺中调用多个网址。如何使用带有许多url的request-promise.js来调用HTTP请求?

首先我想解释一下我的代码。在first_link的第一个承诺将返回许多网址,我会通过网址到第二个承诺。

var req_promise = require('request-promise'); 
var first_link = 'http://test.com'; 

req_promise(first_link) 
.then(function (result){ 
    console.log('Promise 1 finished..'); 
    for (var i=0; i<result.length; i++){ 
     var uri = (result[i]['uri']); 
     console.log('Promise url : ' + uri + ' is being called....'); 

     // in this code below, it will run only the first index and the promise will finish 
     // but i want to make it to run for many urls. 
     return req_promise(uri); 
    } 
}) 
.then(function (result2){ 
    console.log('Promise 2 finished..'); 
    console.log(result2); 
}) 
.catch(function(err){ 
    console.log(err); 
}); 

非常感谢您的关注,衷心感谢您能否帮助我。

回答

0

您可以使用Promise.all()Array.prototype.map()

var req_promise = require('request-promise'); 
var first_link = 'http://test.com'; 

req_promise(first_link) 
.then(function (result) { 
    console.log('Promise 1 finished..'); 
    return Promise.all(result.map(url) { 
     return req_promise(url["uri"]) 
    })) 
}) 
.then(function (results) { 
    console.log(results) 
}) 
.catch(function(err) { 
    console.log(err); 
}); 
+0

感谢您的回复。我管理通过使用Promise.map @ guest271314 –

1

所以我管理由URL

var req_promise = require('request-promise'); 
var first_link = 'http://test.com'; 

req_promise(first_link) 
.then(function (result){ 
    // result consist of objects in array 
    // the object have uri and title properties 
    // result.uri & result.title 
    console.log('Promise 1 finished..'); 
    return result; 
}) 
.then(function (result2){ 
    Promise.map(data, function(d){ 
     return req_promise(data.uri).then((result)=>{return result;}); 
    }).then((result) => {return result}); 
}) 
.catch(function(err){ 
    console.log(err); 
}); 

分组在Promise.map的承诺得到的承诺Seconde系列的价值如果你有同样的问题,我希望它会希望其他人。

+0

来获得价值您还需要包含'var Promise = require(“bluebird”);' – thadk