我应该如何使用来自 IBM Bluemix 的 API Manager 在 OpenWhisk 中调用异步操作?

How should I invoke an asynchronous action in OpenWhisk using API Manager from IBM Bluemix?

我创建了一个用 Node.js 编写的小型 OpenWhisk 操作。此操作调用后端系统。实现动作的函数如下(我已经删除了与这个问题无关的部分代码)。

/**
  *
  * main() will be invoked when you Run This Action.
  *
  */


function main() {

    var request = require("request");

    var data = {
    };

    var options = {
        method: "POST",
        url: "https://whatever.it.is",
        body: data,
        json: true
    };

    request.post(options, function(error,response,body) {
        var data = []; 
        return whisk.done({"msg":data});
    });

    return whisk.async();
}

然后我尝试在 Bluemix 中定义一个 API 调用 API Manager.The 调用完成。但是我收到的结果是 activity 的 ID,而不是我使用 whisk.done().

返回的内容

有什么想法吗?提前致谢。

Tldr:blocking=true 附加到您 URL 的查询到 return 同一 HTTP 请求中的激活结果。


谈到 OpenWhisk 中的操作调用,您可以选择两种不同的模式。 阻塞非阻塞

非阻塞调用 是默认设置,其中您 POST 针对 OpenWhisk 后端的有效负载并取回 激活 ID,将在其下存储您的调用结果(又名 activation)。您可以在稍后的时间点通过 Activations API.

获得这些结果(因此 非阻塞

阻止调用 将等到您的激活完成并且return 结果在同一个 HTTP 请求 中。阻止请求是通过相同的 API 发出的,但附加了查询参数 blocking=true

您的问题听起来很可能是您想要阻塞调用。可以在 OpenWhisk REST API Reference.

中找到查询参数的变体