首页 | 新闻 | 新品 | 文库 | 方案 | 视频 | 下载 | 商城 | 开发板 | 数据中心 | 座谈新版 | 培训 | 工具 | 博客 | 论坛 | 百科 | GEC | 活动 | 主题月 | 电子展
返回列表 回复 发帖

为 OpenWhisk 编写可运行和部署的代码(2)

为 OpenWhisk 编写可运行和部署的代码(2)

创建异步操作OpenWhisk 支持异步操作,允许 JavaScript 代码返回一个 Promise 而不是基本 JSON                对象。在此示例中,该代码调用  。该服务接受一个字符串,并基于两段表明源语言和目标语言的代码来翻译它。
异步操作必不可少,因为您不希望 main() 方法在代码从                Watson 服务获得结果之前结束。通过返回                Promise,只要有结果从服务返回来,客户端就会获得它们。此技术对长期运行的任务很有用,比如数据库访问或文件                I/O。(有关 Promise 的更多信息,包括一个允许编写您自己的 Promise 的沙箱,请参阅  )
以运行、更改和部署此代码。










function main(params) {
  const LanguageTranslationV2 =
    require('watson-developer-cloud/language-translation/v2');

  var url = params.url ||
            'https://gateway.watsonplatform.net/language-translator/api';
  var use_unauthenticated =  params.use_unauthenticated || false;


  const language_translator = new LanguageTranslationV2({
    'username': params.username,
    'password': params.password,
    'url' : url,
    'use_unauthenticated': use_unauthenticated
  });

  return new Promise(function (resolve, reject) {
    language_translator.translate({'text': params.textToTranslate,
                                   'source': 'en', 'target': 'es'},
                                  function(err, res) {
      if (err)
        reject(err);
      else
        resolve(res);
  
});
  });
}

const defaultParameters = {
  'textToTranslate' : 'That that is not confusing is amazing.',
  'username'        : '',
  'password'        : '',
  'url'             : 'https://sandbox-watson-proxy.mybluemix.net/language-translator/api',
  'use_unauthenticated' : true
}








显示结果


编写可部署的异步 JavaScript 代码异步 OpenWhisk 操作的基本结构类似于:
function main(params) {
  return new Promise(function (resolve, reject) {
    invokeSomething(params, function(error, results) {
      if (error)
        reject(error);
      else
        resolve(results);
    });
  });
}




在上面沙箱中的代码中,对 Watson                 Language Translator 服务的调用发生在                Promise                内。在某个时刻,该服务返回一个Error 对象和一个包含结果的                JSON 对象。如果任何地方出错(Error 对象不为                null),reject() 方法会返回 Error 对象。                否则,resolve() 方法返回该服务所返回的 JSON 对象。
备注:在上面的沙箱中,从此页调用此代码时,username 和                password 值可以是空的。要在部署此代码后调用它,可对 defaultParameters                对象执行以下更改:
  • 在 username、password 和 url                    字段中填入用于 Language Translator 服务的 Bluemix 凭证。
  • 将 use_unauthenticated 字段设置为 false。
参阅  ,进一步了解如何创建 Translator 服务的实例并生成它的凭证。
让异步 JavaScript 代码可运行让代码可运行更加复杂,因为您需要处理 Promise                对象。跟以前一样,使用默认参数定义一个 JSON 对象,但是在调用 main() 后,必须使用                then() 和 catch() 方法:
const defaultParameters = {
  'textToTranslate' : 'That that is not confusing is amazing.',
  'username'        : '',
  'password'        : '',
  'url'             : 'https://sandbox-watson-proxy.mybluemix.net/language-translator/api',
  'use_unauthenticated' : true
}

if (require.main === module)
  main(defaultParameters)
    .then((results) => console.log(JSON.stringify(results, null, 2)))
    .catch((error) => console.log(error.message));




then() 方法处理 Promise 中的 resolve()                调用返回的对象。在本例中,这是包含该文本的译文的 JSON 对象。 catch() 方法处理错误情况,处理                reject() 方法返回的 Error 对象。
有关异步操作的完整细节,请参阅  并向下滚动到 “创建异步操作”小节。
返回列表