如何在Promise之外看到抛出的错误?

时间:2016-07-24 10:03:18

标签: javascript node.js promise

我使用csv-parse进行流解析。对于每条记录,我需要调用一些函数mapper.process()。由于后一个函数返回一个promise,因此用co和前缀yield包装它。

parser.on('readable', function() {
  var record;
  while (record = parser.read()) {
    return co(function*() {
       yield mapper.process(record);
    });
  }
});

没有添加(删除第4,6和yield行),一切正常。但是,使用如上所示的解析器,吞下了抛出的错误。

如何解决这个问题?

1 个答案:

答案 0 :(得分:2)

这里的问题是任何抛出的错误都会消失,因为在co函数之后没有catch处理程序。

但更重要的是,while循环中的return语句将导致整个函数返回,因此如果缓冲区中有多条记录,则无法访问它们。

您可以编写以下代码以使其正常工作:

class Basket(model.Models):
    pass

    @classmethod
    def item_added(self, **kargs):
        print karts['instance']


class Item(models.Model):
    basket = models.ForeignKey(Basket, related_name='items')

post_save.connect(Basket.item_added, sender=Item)

但是,请注意,因为您在“可读”回调中处理异步代码,所以您将导致功能立即返回。此行为将导致“ finish ”事件由流末尾的解析器调用,并且可能 之前您实际已完成数据处理。