为 OpenWhisk 编写可运行和部署的代码(2)
- UID
- 1066743
|
为 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 对象。
有关异步操作的完整细节,请参阅 并向下滚动到 “创建异步操作”小节。 |
|
|
|
|
|