Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/40.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 一旦完成CSV阅读,我如何解决承诺?_Javascript_Node.js_Csv_Promise - Fatal编程技术网

Javascript 一旦完成CSV阅读,我如何解决承诺?

Javascript 一旦完成CSV阅读,我如何解决承诺?,javascript,node.js,csv,promise,Javascript,Node.js,Csv,Promise,我正在使用这里()找到的“快速csv”模块,但我愿意改变这一点。我尝试了csv(),但我无法控制它。我还使用了q() 这是一长串承诺函数的一部分,所以我只会用这一个和之后的一个来打扰你 var csvRows=[]; var parseCSV=函数(){ var d=q.defer(); csv .fromPath(学校+“\u export1.csv”) .on('data',函数(data){ csvRows.push(数据); }) .on('end',function(){ 完成=正确

我正在使用这里()找到的“快速csv”模块,但我愿意改变这一点。我尝试了csv(),但我无法控制它。我还使用了q()

这是一长串承诺函数的一部分,所以我只会用这一个和之后的一个来打扰你

var csvRows=[];
var parseCSV=函数(){
var d=q.defer();
csv
.fromPath(学校+“\u export1.csv”)
.on('data',函数(data){
csvRows.push(数据);
})
.on('end',function(){
完成=正确;
d、 解决();
});                
回报承诺;
}
var updateSchedule=函数(){
var d=q.defer();
控制台日志(csvRows);
//csvRows.forEach(函数(行){
//控制台日志(行);
//connection.query('INSERT INTO schedule SET section_id=“”+data[0]+”,student_id=“”+data[1]+”,course_number=“”+data[2]+”,period=“”+data[3]+”,teacher_id=“”+data[4]+”,school_id=“”+school_id+”,函数(错误,行){
//如果(错误){
//控制台日志(err);
//d.拒绝();
//     }
// });
// });
d、 解决();
回报承诺;

}
您需要等待承诺得到解决,并且需要传递承诺中的数据, 试着这样做:

 var parseCSV = function(){
        var d = q.defer();
        csv
            .fromPath(school+'_export1.csv')
            .on('data', function(data){
                csvRows.push(data);
            })
            .on('end', function(){
                d.resolve(csvRows);
            });                
        return d.promise;
    }

var updateSchedule = function(){
   parseCSV.then(function(rows){
   //TODO, your code here
   });
}
deleteRows()
  .then(function(){
      return parseCSV();
  })
  .then(function(rows){
     //TODO, whatever you need to do with rows
     return updateSchedule(rows);
  })
  .done();
deleteRows()
  .then(function(){
       return parseCSV().then(function(rows){
           //Todo your code here
       });
  }).done();
编辑:

试着像这样把你的承诺串起来:

 var parseCSV = function(){
        var d = q.defer();
        csv
            .fromPath(school+'_export1.csv')
            .on('data', function(data){
                csvRows.push(data);
            })
            .on('end', function(){
                d.resolve(csvRows);
            });                
        return d.promise;
    }

var updateSchedule = function(){
   parseCSV.then(function(rows){
   //TODO, your code here
   });
}
deleteRows()
  .then(function(){
      return parseCSV();
  })
  .then(function(rows){
     //TODO, whatever you need to do with rows
     return updateSchedule(rows);
  })
  .done();
deleteRows()
  .then(function(){
       return parseCSV().then(function(rows){
           //Todo your code here
       });
  }).done();
但我更喜欢这样的东西:

 var parseCSV = function(){
        var d = q.defer();
        csv
            .fromPath(school+'_export1.csv')
            .on('data', function(data){
                csvRows.push(data);
            })
            .on('end', function(){
                d.resolve(csvRows);
            });                
        return d.promise;
    }

var updateSchedule = function(){
   parseCSV.then(function(rows){
   //TODO, your code here
   });
}
deleteRows()
  .then(function(){
      return parseCSV();
  })
  .then(function(rows){
     //TODO, whatever you need to do with rows
     return updateSchedule(rows);
  })
  .done();
deleteRows()
  .then(function(){
       return parseCSV().then(function(rows){
           //Todo your code here
       });
  }).done();

小心承诺,尽量不要滥用承诺。

我有点困惑。对不起,我对承诺不熟悉。“完成”是从哪里来的?我刚刚在我的原始帖子中添加了我的承诺链。在之前调用函数而不是在下一个函数中调用函数有什么区别?我只是复制粘贴了你自己的代码,与之无关,我已经删除了它。它应该是这样的。然后(函数(行){return parseCSV(行)},done包含哪些内容?请记住执行解析并像d.resolve(csvRows)一样传递数据;在您返回承诺的每个链中,它可能处于已解决、未解决和被拒绝的状态,一旦您解决了承诺,您就可以在解决本身中传递数据,这样您就能够在适当的“then”(这是解决承诺时被解雇的偶数),只是要小心不要做太多你可能陷入反模式的承诺看看