将异步请求的响应值传递给下一个请求

时间:2018-01-13 13:21:48

标签: javascript node.js callback promise request

我需要从端点及其结构的方式获取一些结果,响应告诉我接下来要使用哪个端点用于下一组结果(每个请求的当前限制为1k行),直到获得所有结果为止。然后我需要将数据拼接在一起。

我可以使用以下代码相对轻松地获取一组结果,但很难理解我如何等待结果才能获取下一组,除非我嵌套它,并且我不想这样做,因为我不知道我需要预先获取多少组结果。

var headers = {
  'Content-type': 'application/json',
  'X-DBX-AUTH-TOKEN': 'yyy@zzz.com/6573846tf9334e'
};

var options_results = {
  method: 'GET',
  headers: headers,
};

var url = 'https://endpoint/execute/{uuid}/0';
options_results.url = url;

function fetchResults(error, response, body) {
  console.log(body);
  var next_uid = JSON.parse(body.uuid);
}

request(options_results, fetchResults);

我已经读过承诺等,但我仍然在努力如何应用这里。任何帮助都会非常感激!

1 个答案:

答案 0 :(得分:0)

您可以将请求回调函数转换为promise。代码看起来像这样:

var requestPromise = options =>
  new Promise(
    (resolve,reject)=>
      request(
        options,
        (error,response,body)=>
          (error)
            ? reject(error)
            : resolve([body,response])
      )
  );

requestPromise(
  {
    url:'https://endpoint/execute/{uuid}/0',
    method: 'GET',
    headers: {
      'Content-type': 'application/json',
      'X-DBX-AUTH-TOKEN': 'yyy@zzz.com/6573846tf9334e'
    }
  }  
)
.then(
  ([body])=>{
    var next_uid  = JSON.parse(body.uuid);
    //make next request
    return requestPromise(
      {
        url:'https://endpoint/execute/{uuid}/0',
        method: 'GET',
        headers: {
          'Content-type': 'application/json',
          'X-DBX-AUTH-TOKEN': 'yyy@zzz.com/6573846tf9334e'
        }
      }          
    )
  }
)
.then(
  ([body,response])=>{
    console.log("made other request:",body,response);
  }
)
.catch(
  err=>console.error("something went wrong:",err)
);