我应该如何使用IBM Bluemix的API Manager在OpenWhisk中调用asynchronous操作?

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

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

Tldr:将URL的查询追加blocking=true以在相同的HTTP请求中返回激活的结果。


说到OpenWhisk中的动作调用,可以select两种不同的模式。 阻塞不阻塞

非阻塞调用是默认的,您可以在OpenWhisk后端上发送有效负载,并获取一个激活ID ,在该激活ID下存储您的调用结果(也称为激活 )。 您可以通过Activations API在稍后的时间点(因此是非阻塞的 )获得这些结果。

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

你的问题听起来像你最希望阻止调用 。 查询参数的变化可以在OpenWhisk REST API参考中find 。