私はBluemixのOpenWhiskで2つのアクションを作成しました。 OpenWhiskプラットフォームの外から呼び出すことができれば、両方とも独立して動作します。しかし、私はアクション2内からアクション1呼び出したいし、次の構文を使用しています:bluemix上のopenwhiskプラットフォーム内でopenwhiskアクションを呼び出す方法は?
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;
});
をアクション2の応答値が期待通りではなく、含まれています
{ "isFulfilled": false, "isRejected": false }
私はaction2(GoogleスプレッドシートAPIを読み込みます)の返信メッセージを期待し、結果を解析します。
{
"duration": 139,
"name": "getEventCfps",
"subject": "[email protected]",
...
"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"
},
...
}
だから私は、 '.then(result1'の変数が正しく解析されていないと思っていますか? OpenWhisk/Blueemixで「このアクションを実行する」ことによって直接アクション2を別々にテストするときに、正しい値を返します。
アップデート2:
よしは解決しました。私は、アクション1の中で呼び出された関数の中で、action2にow.actions.invokeを呼び出していました。このリターンのネストは、問題を引き起こしました。 main関数で直接invokeコードを動かすと、すべて期待どおりに解決されました。ネスティングが約束し、返ってくるときの二重トラブル。 Mea culpa。おかげでみんな
注意をしてみてください、あなたの関数内での約束を返す必要があります。あなたは 'return ow.actions.invoke(...) 'とすることができます – markusthoemmes
私はこれを編集で修正しました。 –
actionNameまたはnameであれば、ドキュメントはあまり明確ではありません。 – csantanapr