2017-03-07 20 views
0

openwhiskでtrycatchコンビネータを使用しようとしていますが、エラーが発生した場合にアクションをキャッチするようにリダイレクトしていますが、リダイレクトできません。以下は、私が試しているサンプルコードです。openwhiskでtrycatchコンビネータを使用しているときの問題

var openwhisk = require('openwhisk') 
var VisualRecognitionV3 = require('watson-developer-cloud/visual-recognition/v3'); 
var visualrecognition = new VisualRecognitionV3({ 
api_key: '******', 
version_date: '***'}); 
var pkgcloud = require('pkgcloud'); 
var osConfig = { 
provider: 'openstack', 
useServiceCatalog: true, 
useInternal: false, 
keystoneAuthVersion: 'v3', 
authUrl: '*****', 
tenantId: '******', 
domainId: '********', 
username: 'admin_******', 
password: '******', 
region: 'dallas'}; 
var client = pkgcloud.storage.createClient(osConfig); 
function main(params) { 
return new Promise(function(resolve, reject) { 
    var options = { 
     container: params.containername || 'my-container', 
     remote: params.filename || 'openwhisk.jpg', 
     local: 'test.jpg' 
    }; 
    client.download(options, function(err, result) { 
     var params = { 
      images_file: fs.createReadStream('test.jpg') 
     }; 
     visualrecognition.classify(params, function(err, res) { 
      if (err) { 
       const wsk = openwhisk({ignore_certs: params['$ignore_certs'] || false}) 
      const catchName = "hello" 
    return wsk.actions 
     .invoke({ 
       actionName: catchName, 
       params: catchArgs, 
       blocking: true 
      }) 
     .then(activation => activation.response.result) 
     .catch(error => { 
       try { 
        // if the action ran and failed, the result field is guaranteed 
        // to contain an error field causing the overall action to fail 
        // with that error 
        return error.error.response.result 
       } catch (e) { 
        return { 
         error: { 
          message: `There was a problem invoking ${catchName}.`, 
          cause: error.error 
         } 
        } 
       } 
      }) 
      } else { 
       var json = { 
        container: params.containername, 
        filename: params.filename 
       }; 
       var length = res.images[0].classifiers[0].classes.length; 
       json.score = 0; 
       var type_hierarchy = ""; 
       for (i = 0; i < length; i++) { 
        var score = res.images[0].classifiers[0].classes[i].score; 
        var classes = res.images[0].classifiers[0].classes[i].class; 
        var htype = res.images[0].classifiers[0].classes[i].type_hierarchy; 
        if (score > json.score) { 
         json.score = score; 
         json.class = classes; 
         json.type_hierarchy = htype || "test"; 
        } 
       } 
       console.log(json); 
       resolve(json); 
      } 
     }); 
    }); 
});}; 

Openwhisk nodejsアクションでtrycatch Combinatorを追加する方法。

答えて

0

OpenWhiskでこのtrycatchアクションを使用するには、まずOpenWhiskで2つの他のアクションを使用する必要があります。コールするtryアクション(キーtryNameで定義)と呼ばれる1つのアクションが使用され、もう1つはエラー/処理を処理するcatchアクション(キーcatchNameで定義)です。たとえば、tryアクションとしてはaction1、catchアクションとしてはaction2が必要です。

CLIでtrycatchアクションを呼び出すと、次のようになります。wsk action invoke -br trycatch -p '$ tryName' action1 -p '$ catchName' action2 -p param1 -p param2試しに最初に呼ばれた。エラーがなければ、結果が返されます。アクション2は面倒ではありません。ただし、action1を呼び出すときにエラーが発生した場合は、action2がcatchアクションとして呼び出され、エラーが処理されたときにaction2が返す結果になります。

OpenWhiskでtrycatchアクションを使用する方法を確認したい場合は、このアクションのテストケースを参考にすることができます。 このファイルの末尾にあるhttps://github.com/openwhisk/openwhisk-catalog/blob/master/tests/src/packages/combinators/CombinatorTests.scala#L144から始まります。

関連する問題