Nodejs / Javascript回调用法 - 等待API调用

时间:2016-02-27 21:54:37

标签: javascript node.js callback jira

我现在已经搜索和阅读了一段时间,似乎无法掌握如何通过回调实现以下目标。我知道这应该是"简单"并且不希望使用promises或任何其他库来解决它,因为我想了解如何仅通过回调实现此目的。

我使用Node.js编写一个webform,如果没有提供JIRA事件编号,它将创建该票证,然后发送一个带有该号码的电子邮件通知。

我拥有的是......伪代码:

function jiraCreate(req, res) {
    if req.body.inc is blank {
        var jiraInc = jiraAPI call to create ticket;
    } else {
        jiraInc = req.body.inc;
    }
    return jiraInc;
}

function jiraComment(req, res, jiraInc) {
    jiraCommentAPI(jiraInc) // jiraAPI call to add comments to the provided jiraInc
}

function handleJira(req, res) {
    var jiraInc = jiraCreate(req, res);
    jiraComment(req, res, jiraInc);
}

handleJira(req, res);

当然,如上所述,如果req.body.inc为空,jiraComment将执行并声明该事件不存在。我如何使用回调重新编写它来实现我的目标?有可能吗?

我已经在Callbacks上阅读了这么多内容,但似乎无法得到它。无论我如何编写代码,jiraComment似乎总是先运行。我非常感谢您提供的任何帮助!

谢谢!

1 个答案:

答案 0 :(得分:1)

“jiraAPI调用创建票证”是异步的......即当你打电话时,代码就是

http.request(options, function(res) {
  console.log('STATUS: ' + res.statusCode);
  console.log('HEADERS: ' + JSON.stringify(res.headers));
  var body = "";
  res.setEncoding('utf8');
  res.on('data', function(chunk) {
    body += chunk;
  });
  res.on('end', function() {
      // {1} Here you can continue with next step
  });
}).end();

您应该在{1}中放置下一步的代码。在提出请求后立即放置它将无法正常工作。