2017-08-29 77 views
0

我对nodejs相当陌生,我有一个场景,当用户点击一个端点时,我需要进行两个post调用。第一个API调用返回给我一个我应该在第二次调用中使用的URL。这是我写过的用于完成这些后期调用的通用模块。多个请求覆盖变量值

// First call 
requester.post(options1).then(function(result1){ 
    var options2 = { 
     url: result1.url, 
     req: req, 
     res: res 
    } 
    ... 
    // Second Call 
    requestor.post(options2).then(function(result2) { 
    }) 
}) 

var requestor = { 
    post: function(options) { 
    url = options.url; 
    ... 

    var deferred = q.defer(); 

    ... 
    var post = request.post(url, data, function (error, response, body) { 
     if (!error && response.statusCode == 200) { 
     try { 
      deferred.resolve(body); 
     } 
     catch(e) { 
      deferred.reject(new Error('Request failed while processing request')); 
     } 
     } else { 
     deferred.reject({code: code}); 
     } 
    }) 
    ... 
    return deferred.promise; 
    } 
} 

我的问题是,当我有两个请求在确切的微秒进来时,url变量被覆盖。虽然第一个请求的“第二次调用”仍在进行中(并且在我的情况下最终会超时),但第二次请求的第二次调用将覆盖url变量。请建议我应该修复/更改。

回答

1

它覆盖url因为url是一个全局变量

var requestor = { 
post: function(options) { 
    url = options.url; 

更改上面的代码段将

var requestor = { 
post: function(options) { 
    var url = options.url;