【问题标题】:How should I invoke an asynchronous action in OpenWhisk using API Manager from IBM Bluemix?我应该如何使用 IBM Bluemix 的 API Manager 在 OpenWhisk 中调用异步操作?
【发布时间】:2016-05-23 05:24:47
【问题描述】:

我创建了一个用 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() 返回的内容。

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

【问题讨论】:

    标签: node.js api ibm-cloud openwhisk


    【解决方案1】:

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


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

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

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

    您的问题听起来您很可能需要阻止调用。查询参数的变化可以在OpenWhisk REST API Reference找到。

    【讨论】:

    • 谢谢,markusthoemmes。这解决了我的问题。我知道阻塞和非阻塞......但我不知道这是我问题的根源。恕我直言,如果您要求阻塞调用,响应中的 JSON 对象将返回activationId 和响应,这会很好。
    猜你喜欢
    • 2017-08-07
    • 2018-01-04
    • 2017-06-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多