Ibm cloud 如何在bluemix上的openwhisk平台中调用openwhisk操作?
我在Bluemix上的OpenWhisk上创建了两个操作。当我可以从OpenWhisk平台外部调用它们时,这两种方法都可以独立工作。但我想从action2中调用action1,并使用以下语法:Ibm cloud 如何在bluemix上的openwhisk平台中调用openwhisk操作?,ibm-cloud,openwhisk,Ibm Cloud,Openwhisk,我在Bluemix上的OpenWhisk上创建了两个操作。当我可以从OpenWhisk平台外部调用它们时,这两种方法都可以独立工作。但我想从action2中调用action1,并使用以下语法: var openwhisk = require('openwhisk'); function main(args){ const name = 'action2'; const blocking = true; const params = { param1: 'sthing'}; var
var openwhisk = require('openwhisk');
function main(args){
const name = 'action2';
const blocking = true;
const params = { param1: 'sthing'};
var ow = openwhisk();
ow.actions.invoke({name, blocking, params})
.then(result => {
console.log('result: ', result);
return result; // ?
}).catch(err => {
console.error('failed to invoke actions', err);
});
}
但我得到一个空结果,没有控制台消息。帮点忙就好了
更新1:
按照建议添加退货选项时,退回OpenWhisk的承诺,如下所示:
return ow.actions.invoke({name, blocking, params})
.then(result => {
console.log('result: ', result);
return result;
}).catch(err => {
console.error('failed to invoke actions', err);
throw err;
});
action2的响应值不符合预期,但包含:
{ "isFulfilled": false, "isRejected": false }
我期望action2的返回消息(读取Google Sheets API)并解析结果:
{
"duration": 139,
"name": "getEventCfps",
"subject": "me@email.com",
...
"response": {
"result": {
"message": [
{
"location": "Atlanta, GA",
"url": "https://werise.tech/",
"event": "We RISE Women in Tech Conference",
"cfp-deadline": "3/31/2017",
...
}
]
},
"success": true,
"status": "success"
},
...
}
因此,我希望我没有正确解析action1中的“.then(result)”变量?因为当我单独测试action2时,从OpenWhisk外部通过Postman或API Connect,或直接通过OpenWhisk/Bluemix中的“运行此操作”,它会返回正确的值
更新2:
好的,解决了。我在action1中调用的函数中调用了ow.actions.invoke到action2,返回的嵌套导致了问题。当我直接在主函数中移动调用代码时,所有问题都按预期解决了。嵌套promises和returns时出现了双重问题。这是罪过。谢谢大家。您需要返回一个在你的功能中承诺试试这个
var openwhisk = require('openwhisk');
function main(args){
const name = '/whisk.system/utils/echo';
const blocking = true;
const params = { param1: 'sthing'};
var ow = openwhisk();
return ow.actions.invoke({name, blocking, params})
.then(result => {
console.log('result: ', result);
return result;
}).catch(err => {
console.error('failed to invoke actions', err);
throw err;
});
}
您需要在函数中返回一个承诺尝试以下操作
var openwhisk = require('openwhisk');
function main(args){
const name = '/whisk.system/utils/echo';
const blocking = true;
const params = { param1: 'sthing'};
var ow = openwhisk();
return ow.actions.invoke({name, blocking, params})
.then(result => {
console.log('result: ', result);
return result;
}).catch(err => {
console.error('failed to invoke actions', err);
throw err;
});
}
如果您只想调用该操作:
var openwhisk = require('openwhisk');
function main(args) {
var ow = openwhisk();
const name = args.action;
const blocking = false
const result = false
const params = args;
ow.actions.invoke({
name,
blocking,
result,
params
});
return {
statusCode: 200,
body: 'Action ' + name + ' invoked successfully'
};
}
如果要等待调用操作的结果,请执行以下操作:
var openwhisk = require('openwhisk');
function main(args) {
var ow = openwhisk();
const name = args.action;
const blocking = false
const result = false
const params = args;
return ow.actions.invoke({
name,
blocking,
result,
params
}).then(function (res) {
return {
statusCode: 200,
body: res
};
});
}
如果您只想调用该操作:
var openwhisk = require('openwhisk');
function main(args) {
var ow = openwhisk();
const name = args.action;
const blocking = false
const result = false
const params = args;
ow.actions.invoke({
name,
blocking,
result,
params
});
return {
statusCode: 200,
body: 'Action ' + name + ' invoked successfully'
};
}
如果要等待调用操作的结果,请执行以下操作:
var openwhisk = require('openwhisk');
function main(args) {
var ow = openwhisk();
const name = args.action;
const blocking = false
const result = false
const params = args;
return ow.actions.invoke({
name,
blocking,
result,
params
}).then(function (res) {
return {
statusCode: 200,
body: res
};
});
}
请注意,
openwhisk
已经返回了一个承诺,因此创建一个新的承诺是多余的。您只需返回ow.actions.invoke(…)
文档不太清楚它是actionName还是name,或者这两个名称中的任何一个都可以使用。因此,我以前确实尝试过这个方法,当我现在这样做时,它会返回'something',但我不理解返回值,所以我很困惑,'result'响应值是{“IsCompleted”:false,“isRejected”:false},而我期望类似这样的结果{“duration”:139,“name”:“getEventCfps”,“subject”:me@email.com,“版本”:“0.0.27”,“响应”:{“结果”:{“消息”:[{“位置”:“佐治亚州亚特兰大”,投射响应:result.response.result
投射响应”是什么意思?请注意,openwhisk
已经返回了一个承诺,因此创建一个新的承诺是多余的。您只需返回ow.actions.invoke(…)
文档不太清楚它是actionName还是name,或者这两个名称中的任何一个都可以使用。因此,我以前确实尝试过这个方法,当我现在这样做时,它会返回'something',但我不理解返回值,所以我很困惑,'result'响应值是{“IsCompleted”:false,“isRejected”:false},而我期望类似这样的结果{“duration”:139,“name”:“getEventCfps”,“subject”:me@email.com“,”版本“:”0.0.27“,”响应“:{”结果“:{”消息“:[{”位置“:”佐治亚州亚特兰大”,投射响应:result.response.result
投射响应”是什么意思?