如何进行需要其子函数信息的回调

Ric*_*olo 14 javascript callback node.js haraka

我正在使用Node.js作为Haraka(一个smtp服务器)插件的项目.

这是Node.JS,我有一个问题回调.我无法将此特定代码转换为使用回调.

所以,这是我的代码:

exports.hook_data = function (next, connection) {
    connection.transaction.add_body_filter('', function (content_type, encoding, body_buffer) {
        var header = connection.transaction.header.get("header");
        if (header == null || header == undefined || header == '') return body_buffer;

        var url = 'https://server.com/api?header=' + header ;
        var request = require('request');
        request.get({ uri: url },
          function (err, resp, body) {
              var resultFromServer = JSON.parse(body);
              return ChangeBuffer(content_type, encoding, body_buffer, resultFromServer);
          }
        );
    });
    return next();
}
Run Code Online (Sandbox Code Playgroud)

此代码不起作用,因为它不等待Request的回调继续.我需要先完成请求next();

这些是要求:

  1. 在结束时exports.hook_data必须返回next().但它只需要在请求后返回它.
  2. 我需要返回一个Bufferin add_body_filter但是我需要创建一个缓冲区,其中包含从服务器获取的信息.
  3. 要获取Get Request,我需要使用header我内部只有的参数()add_body_filter.

所以问题是我之前无法发出请求add_body_filter并将结果放在回调中,因为我需要发出请求的参数只在里面add_body_filter.

有什么建议吗?

Hur*_*ton 4

除非你愿意使用同步、阻塞函数,否则不可能满足你所​​列的要求。

我会检查每个要求背后的原因,看看你是否以不同的方式实现你的目标。

从表面上看,仅查看您那里的代码,我会寻找一种方法来更改合同,exports.hook_data以便您能够next()request.get回调内部进行调用。