1

我创建了一个用 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 Manager 中定义一个 API 调用。调用完成。但我收到的结果是活动的 ID,而不是我使用whisk.done() 返回的内容。

有任何想法吗?。提前致谢。

4

1 回答 1

2

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


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

非阻塞调用是默认设置,您可以在其中POST针对 OpenWhisk 后端的有效负载并取回激活 id,调用结果(也称为激活)将存储在该 id 下。您可以在稍后的时间点(因此是非阻塞的)通过Activations API获得这些结果。

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

您的问题听起来您很可能想要一个阻塞调用。查询参数的变化可以在OpenWhisk REST API 参考中找到。

于 2016-05-22T21:06:16.493 回答