NodeJS:如何在For Loop中等待HTTP Get请求完成?

时间:2018-09-12 08:29:15

标签: node.js

我在NodeJS中有一个for循环功能。我想等到Http Get请求的结果在For Loop中完成之后再执行下一次迭代,如何实现?

./ibdata1

3 个答案:

答案 0 :(得分:1)

您应该进行for循环async

const main = async () => {
  for (let k = 0; k < fd.length; k++) {
    const url = fd[k].nct_id;

    const trials = await HttpSearch({ condition: url });

    console.log(trials);
  }
};

main().catch(console.error);

这将导致循环在每个HttpSearch处“暂停”。

答案 1 :(得分:0)

我会这样

let k = 0 ;
let len = fd.length;
for (; k > len;) { 
  let url = fd[k].nct_id;
  let subs = await HttpSearch({condition: url});
  console.log(subs);
  k++
}

或者像这样有希望

let url;
let promiseChain = Promise.resolve();
for (let i = 0; i < fd.length; i++) { 
    url = fd[k].nct_id;

    // you need to pass the current value of `url`
    // into the chain manually, to avoid having its value
    // changed before the .then code accesses it.

    const makeNextPromise = (url) => () => {

         HttpSearch({condition: url})
            .then((result) => {
                // return promise here
                return result
            });
    }

    promiseChain = promiseChain.then(makeNextPromise(url))
}

答案 2 :(得分:0)

这是使用递归的,一旦前一个完成,递归就会调用

var limit = fd.length;
var counter = 0;

HttpSearch({condition: fd[0].nct_id;}).then(yourCallBack);

function yourCallBack(trials){
    console.log(trails);
    if(counter == limit)
        return console.log('Done')
    HttpSearch({condition: fd[counter].nct_id;}).then(yourCallBack);
    counter++;
}