Javascript 在node.js中调用同步进程

Javascript 在node.js中调用同步进程,javascript,node.js,Javascript,Node.js,在调用zendesk api时,我被困在nodejs中 当我调用zendesk.tickets.incremental Api时,它为我提供了ticketId,并在另一个函数中使用了它,通过调用zendesk.tickets.exportAudit来获取以前的任何更改 我也得到了响应,但在获取数据的过程中,另一个ticketId调用了so,在响应“error:item not found”中标记了一个错误,然后获取新ticketId的数据,以此类推 我需要的是,我需要它阻止进程,直到第一个Id的

在调用zendesk api时,我被困在nodejs中

当我调用zendesk.tickets.incremental Api时,它为我提供了ticketId,并在另一个函数中使用了它,通过调用zendesk.tickets.exportAudit来获取以前的任何更改

我也得到了响应,但在获取数据的过程中,另一个ticketId调用了so,在响应“error:item not found”中标记了一个错误,然后获取新ticketId的数据,以此类推

我需要的是,我需要它阻止进程,直到第一个Id的数据完全丢失

这是我的密码

//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))      });
//调用ticketincrementaldetailticketid(如1、2等)
app.get('/',函数(req,res){
zendesk.tickets.incremental(0,函数(错误、状态列表、正文、响应列表、结果列表){
如果(错误){
控制台日志(err);
返回;
} 
var ticketIncreDetails=(JSON.stringify(body));
res.end(详细信息);
对于(变量i=0;i
正如@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();
          }

       });
    }
//调用ticketincrementaldetailticketid(如1、2等)
app.get('/',函数(req,res){
zendesk.tickets.incremental(0,函数(错误、状态列表、正文、响应列表、结果列表){
如果(错误){
控制台日志(err);
返回;
} 
var ticketIncreDetails=(JSON.stringify(body));
res.end(详细信息);
ticketvalue(body,body.length,0);
//ticketValues(body,body.length,0,function(){..如果您想在..之后执行某些操作);
});
});
//这是出口审计用的
函数票证值(票证、长度、索引、回调){
zendesk.tickets.exportAudit(ticke[index].id,函数(错误,状态列表,正文,响应列表,结果列表){

如果(index如@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();
          }

       });
    }
//调用ticketincrementaldetailticketid(如1、2等)
app.get('/',函数(req,res){
zendesk.tickets.incremental(0,函数(错误、状态列表、正文、响应列表、结果列表){
如果(错误){
控制台日志(err);
返回;
} 
var ticketIncreDetails=(JSON.stringify(body));
res.end(详细信息);
ticketvalue(body,body.length,0);
//ticketValues(body,body.length,0,function(){..如果您想在..之后执行某些操作);
});
});
//这是出口审计用的
函数票证值(票证、长度、索引、回调){
zendesk.tickets.exportAudit(ticke[index].id,函数(错误,状态列表,正文,响应列表,结果列表){

如果(Index这里几乎总是有另一个解决方案,但你可以查看软件包。除此之外,你的问题有点让人困惑。几乎总是有另一个解决方案,但你可以查看软件包。除此之外,你的问题有点让人困惑。谢谢你的及时回复,很高兴至少等待。我尝试了你的解决方案在上,它最多工作3-4张票据,在word之后,我得到了这个错误{[error:Zendesk error(404):找不到项]状态码:404,结果:,retryAfter:null}虽然zendesk可能包含个票证,但目前有12个票证。您愿意与我分享如何处理多达N个票证吗?@vicky并不真正理解您的问题,但如果您想跳过它们,因为您的代码处理错误为if(err){console.log(err);return;},只需像if(err){console.log(err)那样替换它们即可;index++;ticketvalue(ticket、length、index、callback);}它们将被跳过。谢谢Carr,你的想法可行,但我使用另一种方法,我选择async.series.OK~这应该是一种更优雅的方法=)谢谢你的及时响应,至少很高兴等待。我尝试了你的解决方案,它可以处理3-4个ticket,在word之后我得到了这个错误{[错误:Zendesk错误(404):未找到项]状态代码:404,结果:,retryAfter:null}虽然zendesk可能包含个票证,但目前有12个票证。您愿意与我分享如何处理多达N个票证吗?@vicky并不真正理解您的问题,但如果您想跳过它们,因为您的代码处理错误为if(err){console.log(err);return;},只需像if(err){console.log(err)那样替换它们即可;index++;ticketvalue(ticket、长度、索引、回调);}它们将被跳过。谢谢Carr,你的想法可行,但我使用另一种方法,我选择async.series.OK~这应该是一种更优雅的方法=)