响应在从promise中收集结果之前终止

时间:2017-03-20 18:15:12

标签: javascript node.js promise

在以下代码段中,lineReader会收听事件line。收到line事件后,会在da上调用Parser,并返回Promise

lineReader.on('line',(line) => {
  Parser.da(line).then((info) => {
  });
});

lineReader.on('close',() => {
  req.end();
});

Parser.da = function(line) {
  return new Promise((resolve,reject) => {
       geo.getLocation().then((r) => {
           console.log(r); return resolve(r);
       }); 
  });
}

da函数返回调用一个也在Promise上运行的函数。会发生什么事情,我永远不会看到来自geo.getLocationreadLine.on('close')的输出被调用。

处理这种情况的方法应该是什么?

2 个答案:

答案 0 :(得分:1)

你没有解决这个承诺。从地理服务获得结果时,您需要解析数据。

看看这个

Parser.da = function(line) {
  return new Promise((resolve,reject) => {
       geo.getLocation().then((r) => {
           console.log(r);
           resolve(r);
       }); 
  });
}

答案 1 :(得分:0)

为什么不直接从geo.geoLocation()返回Promise而不是将其包装到另一个promise中?像这样:

Parser.da = function(line) {
  return geo.geoLocation();
}

或者您可能希望链接"然后"而是。虽然这是同步的

Parser.da = function(line) {
  return geo.geoLocation().then(function (r) {
    console.log(r);
    return r; // return r to chain it to the next ".then"
  });
}

一个可能的问题可能是promise是异步的,所以lineReader.on(" line");事件在执行promise之前关闭,因为事件是同步的。然后是lineReader.on(" close");在承诺解决之前执行。

此外,你应该总是有一个" catch"在你的承诺中,你可以看到是否有任何错误。像这样:

lineReader.on('line',(line) => {
  Parser.da(line).then((info) => {
    // ...do code here
  }, console.error); // errors will be outputted to console
});