我对nodejs相当陌生,并且有一种情况,当用户点击一个端点时,我需要打两次电话。第一个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变量。请提出我应该修复/更改的内容。

最佳答案

它正在覆盖url,因为url是全局变量

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


将上面的代码片段更改为此

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

关于javascript - 多个请求覆盖变量值,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/45946634/

10-09 20:57