buk*_*api 2 node.js openwhisk ibm-cloud
我正在BlueMix OpenWHisk中开发一个模块,在Cloudant Feed更改之后,我需要调用一个url,这将更新另一个平台上的一些细节.我正在使用nodejs运行时.
问题是我的行动是等待POST请求的结果到上面提到的url.如果POST成功,那么我应该执行下一个事件序列.
问题:
如何在执行下一个序列之前等待POST请求的结果?
是否可以等待并返回POST请求的结果.
发布我的代码
/**
*
* main() will be invoked when you Run This Action
*
* @param OpenWhisk actions accept a single parameter, which must be a JSON object.
*
* @return The output of this action, which must be a JSON object.
*
*/
const util = require('util');
var http = require('http');
function main(params) {
// Updated the status of the User
params.status ="updated1";
var options = {
host: "myhost.mybluemix.net",
path: "/addtoimc",
method: "POST",
headers: {
"Content-Type": "text/plain"
}
};
return {message : addtoIMC(options)};
}
function createRequest(data, options)
{
return http.request(options, function (res) {
var responseString = "";
res.on("data", function (data) {
responseString += data;
// save all the data from response
});
res.on("end", function () {
console.log("AAA" + responseString);
});
});
}
function addtoIMC(options)
{
return new Promise(function(resolve, reject) {
var req = createRequest("Hello",options);
var reqBody = "post_data";
req.write(reqBody);
req.end();
});
}
Run Code Online (Sandbox Code Playgroud)
您的请求逻辑有点破碎.例如,你的承诺永远不会被解决,你也不会听正确的回调.
我建议你改用request-promise.以下应该有效
const request = require('request-promise');
function main(params) {
return request({
url: "http://myhost.mybluemix.net/addtoimc",
method: "POST",
headers: {
"Content-Type": "text/plain"
}
}).then(response => {
if(response.success) {
return Promise.resolved({message: "nice"});
} else {
return Promise.rejected({error: "it broke"});
}
});
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
255 次 |
| 最近记录: |