2016-08-05 2 views
1

Я застреваю в nodejs во время вызова zendesk api.вызвать синхронный процесс в node.js

Как я назвал zendesk.tickets.incremental Api, он предоставляет мне ticketId и тот, который используется в другой функции для получения каких-либо изменений с предыдущего, вызывая zendesk.tickets.exportAudit.

Я также получаю ответ, но при извлечении данных другой билетId вызывал так ранее флаг ошибки в ответе «error: item not found», а затем извлекал данные для нового ticketId и т. Д.

Что мне нужно, мне нужно, чтобы он блокировал процесс до тех пор, пока данные первого Идентификатора полностью не исчезнут.

Это мой код.

//Calling ticketIncremental Details ticketId (likes 1, 2 etc) 
app.get('/', function (req, res) {   

    zendesk.tickets.incremental(0, function(err, statusList, body, responseList, resultList) { 
     if (err) { 
      console.log(err); 
      return; 
     } 

     var ticketIncreDetails = (JSON.stringify(body)); 

     res.end(ticketIncreDetails); 

     for (var i=0; i< body.length; i++) { 

     ticketValues(body[i].id) //within this function another API of zendek calling for exportAudit 

     } 

}); 


//This is for exportAudit 

    function ticketValues(ticketId) { 

     zendesk.tickets.exportAudit(ticketId, function(err,statusList, body, responseList, resultList) { 

      if(err) { 
       console.log(err); 
       return; 
      } 

     console.log("ticketExportAudit: " + JSON.stringify(body))  }); 
+0

Существует практически всегда другое решение, но вы можете проверить пакет ['sync'] (https://www.npmjs.com/package/sync). Кроме этого, ваш вопрос немного запутан. – qxz

ответ

0

Как @qxz сказать, что лучше, чтобы проверить, есть ли синхронизация пакет или нет, вы должны справиться с этим упором на обратный вызов, потому что zendesk.tickets.exportAudit нужно время, чтобы завершить свою работу, но для цикла не будет действовать так, код ниже обрабатывает эту проблему с обратным вызовом, вы могли бы посмотреть.

//Calling ticketIncremental Details ticketId (likes 1, 2 etc) 
app.get('/', function (req, res) {   

    zendesk.tickets.incremental(0, function(err, statusList, body, responseList, resultList) { 
     if (err) { 
      console.log(err); 
      return; 
     } 

     var ticketIncreDetails = (JSON.stringify(body)); 

     res.end(ticketIncreDetails); 


     ticketValues(body,body.length,0); 
     //ticketValues(body,body.length,0,function(){..if you wanna do something after..}); 


    }); 

}); 
    //This is for exportAudit 

    function ticketValues(ticket,length,index,callback) { 

     zendesk.tickets.exportAudit(ticke[index].id, function(err,statusList, body, responseList, resultList) { 
      if(index<length){ 
       if(err) { 
        console.log(err); 
        return; 
       }else{ 
       console.log("ticketExportAudit: " + JSON.stringify(body)); 
       index++; 
       ticketValues(ticket,length,index,callback); 
       } 

      }else{ 

      if(callback) 
       callback(); 
      } 

     }); 
    } 
+0

Спасибо за быстрый ответ и счастливый, по крайней мере, он ждет. Я пробовал ваше решение и его работу до 3-4 билетов и после слова, я получил эту ошибку {[Ошибка: ошибка Zendesk (404): не найден] statusCode: 404, результат:, retryAfter: null } В то время как zendesk может содержать no.of билетов, в настоящее время имеется 12 билетов. Хотели бы вы рассказать мне, как можно обрабатывать эти билеты до Nth no.of? – vicky

+0

@ vicky Не совсем понимаю вашу проблему, но если вы хотите пропустить их, из-за ошибки обработки кода с помощью ** if (err) {console.log (err); return;} ** , просто замените их как ** if (err) {console.log (err); index ++; ticketValues ​​(билет, длина, индекс, обратный вызов);} ** , и они будут пропущены. – Carr

+0

Спасибо Carr, что ваша идея работает, но я использую другой способ, я выбираю async.series. – vicky

Смежные вопросы