2015-10-14 3 views
0

Я попытался запустить этот код:Узел, не выполняющий запрос внутри запроса?

app.delete('/closeTrelloBoard', function (req, res) { 
    console.log('[data], [...]'); 
    var options = { 
     method: 'GET', 
     url: 'https://api.trello.com/1/members/someId/boards?key=KEY&token=TOKEN' 
    }; 

    request(options, function (error, body) { 
     var boards = JSON.parse(body.body); 

     for (var i=0; i<boards.length; i++) { 
      console.log(boards[i].id); //This line runs 
      app.put('/closeTrelloBoard',function (req, res) { 

       var options = { 
        method: 'PUT', 
        url: 'https://api.trello.com/1/boards/'+boards[i].id+'/closed?key=KEY&token=TOKEN&value=true', 
       }; 

       request(options, function (error,body) { 
        console.log('Board closed'); //But this line not runs 
       }); 
      }); 
     }; 

    }); 
}); 

В коде выше я попытался сделать запрос в другой запрос обратного вызова. Проблема в том, что первый запрос дал мне правильный ответ, но второй запрос не дал мне никакого результата.

Пожалуйста, объясните мне, почему второй запрос не работает.

ответ

0

Ваш второй запрос установлен в обратном вызове app.put(). Это означает, что запрос будет запущен только тогда, когда будет вызван маршрут /closeTrelloBoard (логично не указывать маршрут в обратном вызове для запроса, что еще хуже - в цикле). Таким образом, чтобы выполнить второй запрос после первого завершения, вызовите его непосредственно перед методом app.put(). Я не знаю ваших намерений, и я могу ошибаться, но думаю, что app.put() должен быть установлен где-то в другом порядке кода.

app.delete('/closeTrelloBoard', function (req, res) { 
console.log('[data], [...]'); 
var options = { 
    method: 'GET', 
    url: 'https://api.trello.com/1/members/someId/boards?key=KEY&token=TOKEN' 
}; 

request(options, function (error, body) { 
    var boards = JSON.parse(body.body); 

    for (var i=0; i<boards.length; i++) { 
     console.log(boards[i].id); //This line runs 
     var options = { 
      method: 'PUT', 
      url: 'https://api.trello.com/1/boards/'+boards[i].id+'/closed?key=KEY&token=TOKEN&value=true', 
     }; 

     request(options, function (error,body) { 
      console.log('Board closed'); //But this line not runs 
     }); 

    }; 
    app.put('/closeTrelloBoard',function (req, res) { 


    }); 
}); 

}); 
0

Итак, я не очень понимаю, что вы пытаетесь сделать ... По тегам я вижу, что вы используете ExpressJS, так что «приложение» является условностью его основного вара .. .

Теперь, что я могу прочитать из кода, есть: Вы регистрируете метод «DELETE» для «/ closeTrelloBoard», затем вы создаете объект с именем «options» для передачи запроса, а вы сделайте запрос ... Хорошо, теперь вы разбираете JSON из тела запроса и ... создаете цикл для запросов ... ok, это первое, что я вижу, попробуйте использовать обратные вызовы вместо циклов, потому что мощность узла. Давайте продолжим. Теперь ... Я не понимаю, вы регистрируетесь, методы «PUT» для «/ closeTrelloBoard» ... Я думаю, что этого не должно быть ... и затем вы делаете запрос Loop. ..

Посмотрим, сможет ли это работать, это должен быть «способ NodeJS», если у вас есть сомнения, просто спросите их :) Я не помню, как вызываются эти методы обратного вызова, но я помню, что у них есть свои собственные имя, также я не пробовал, поэтому ... Он не может работать:

app.delete('/closeTrelloBoard', function (req, res) { 
    console.log('[data], [...]'); 
    var options = { 
     method: 'GET', 
     url: 'https://api.trello.com/1/members/someId/boards?key=KEY&token=TOKEN' 
    }; 

    request(options, function (error, body) { 
     var boards = JSON.parse(body.body); 

     loopEveryBoard = function(i, next){ 
      if (i >= boards.length){ 
       next() 
      } else { 
       var options = { 
        method: 'PUT', 
        url: 'https://api.trello.com/1/boards/'+boards[i].id+'/closed?key=KEY&token=TOKEN&value=true', 
       }; 

       request(options, function (error,body) { 
        console.log('Board ' + i + ' closed'); //But this line not runs 
        loopEveryBoard(++i, next); // The ++ has to be on the left to make it effective before the function takes the value 
       }); 
      } 
     } 

     loopEveryBoard(0, function(){ 
      console.log('Every board closed'); 
     }); 

    }); 
}); 
Смежные вопросы