如何更改我的回调函数以承诺?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何更改我的回调函数以承诺?相关的知识,希望对你有一定的参考价值。

这是我的节点js回调函数,我想改变这个函数来承诺。

service.parseToCsv('resources/' + peopleFileName, (err,people) => {
       if(err){
           res.status(400).send('ERROR TO PARSING CSV PEOPLES');
       } else{
           Entry.insertPeoples(people,(err,results) => {
               if(err){
                   let rmPath = 'resources/' + peopleFileName;
                   fs.unlink(rmPath);
                   res.status(400).send('ERROR TO INSERT PEOPLE DATA IN TO DATABASE');
               } else{
                   service.parseToCsv('resources/' + facilityFileName,(err,facilities) => {
                       if(err){
                           console.log(err);
                           res.status(400).send('ERROR TO PARSING CSV FACILITIES');
                       } else{

                           res.status(200).send(facilities);

                       }
                   })
               }
           });
       }
    });

我想看看示例代码。

答案

假设service.parseToCSV和Entry.insertPeople返回promises。

service.parseToCSV('resources/' + peopleFileName).catch(err => Promise.reject(new Error('PARSING CSV PEOPLES')))
.then(people => {
    return Entry.insertPeople(people).catch(err => Promise.reject(new Error('INSERT PEOPLE DATA IN TO DATABASE')));
})
.then(facilityFileName => {
    return service.parseToCSV('resources/' + facilityFileName).catch(err => Promise.reject(new Error('PARSING CSV FACILITIES')));
})
.then(facilities => {
    res.status(200).send(facilities);
})
.catch(err) => {
    console.log(err);
    res.status(400).send('ERROR TO '+err.message);
});

以上是关于如何更改我的回调函数以承诺?的主要内容,如果未能解决你的问题,请参考以下文章

如何等到回调被调用

如何等到回调被调用

如何使用 PromiseKit 重构快速回调以承诺

如何“承诺”(或回调)此代码

如何创建从回调函数返回承诺的函数[重复]

方向更改时的 DialogFragment 回调