2017-03-16 11 views
0

私は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。おかげでみんな

答えて

4

あなたは `openwhisk`がすでに約束を返しますので、新しいものを作成することは冗長であることを、この

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; 
    }); 
} 
+0

注意をしてみてください、あなたの関数内での約束を返す必要があります。あなたは 'return ow.actions.invoke(...) 'とすることができます – markusthoemmes

+0

私はこれを編集で修正しました。 –

+0

actionNameまたはnameであれば、ドキュメントはあまり明確ではありません。 – csantanapr

関連する問題