Это не будет очень сложно, но, поскольку я подумал, что это круто, я решил поделиться этим. В настоящее время я работаю над Семинаром OpenWhisk, набором задач/задач в стиле Node School, чтобы помочь вам изучить основы OpenWhisk. Одна из проблем заключается в том, что вы создаете последовательность, и хотя я рекомендую людям попытаться решить проблему самостоятельно, я решил поделиться своим решением и тем, что я обнаружил, работая над ним.
Последовательности — это то, что вы можете себе представить, два или более действия, которые связаны друг с другом. Вы определяете их, перечисляя действия, которые вы хотите выполнить, и при запуске OpenWhisk выполнит каждое по порядку и передаст вывод из одного на вход другого. (И это поднимает важную деталь, о которой я расскажу чуть позже.)
Прежде чем я расскажу о проблеме из семинара, давайте построим простой пример. Сначала мы создадим действие, которое принимает строку и возвращает размер строки. Чтобы было ясно, это тривиально до глупости, но давайте сделаем это красиво и просто.
function main(params) {
return { length:params.text.length };
}
Я назвал это действие strlen. Теперь давайте создадим действие, которое на основе числового ввода находит простые числа. Я собираюсь использовать решение из этого ответа на переполнение стека:
//http://stackoverflow.com/a/12287599 function getPrimes(max) { var sieve = [], i, j, primes = []; for (i = 2; i <= max; ++i) { if (!sieve[i]) { // i has not been marked -- it is prime primes.push(i); for (j = i << 1; j <= max; j += i) { sieve[j] = true; } } } return primes; }
function main(params) { return { primes:getPrimes(params.number) }
}
Он принимает числовой параметр и возвращает массив в ключе, называемом простым числом.
В качестве небольшого отступления я использовал расширение OpenWhisk для Visual Studio Code, чтобы создать и протестировать эти действия. Хотя расширение все еще находится в разработке, пока оно работает чертовски хорошо.
Хорошо, так как же нам сделать последовательность?
Во-первых, вы создаете последовательность, очень похожую на действие, фактически команда начинается так же:
wsk action create name
Но здесь все по-другому — вместо того, чтобы передавать имя локального файла для вашего действия, вы передаете аргумент –sequence
и список действий:
wsk action create name --sequence a,b,c
Итак, для нашего кода выше я бы сделал так:
wsk action create strToPrimes --sequence strlen,primes
После этого вы вызываете его, как обычное действие:
wsk action invoke strToPrimes -b -r -p text "Raymond"
Обратите внимание, что я передаю свой аргумент text
, ожидаемый моим первым действием. И это работает отлично! (Нет!)
Что пошло не так? Вы заметили, что на выходе strlen был объект с ключом «длина»? Вы заметили, что входные данные для простых чисел ожидали параметра под названием «число»? При построении последовательностей вы должны убедиться, что ваши выходные/входные данные совпадают. В общем, это не должно быть большой проблемой. Я согласен с заменой strlen на вывод «число», но я бы хотел, чтобы OpenWhisk позволял мне определять последовательности вместе со способом «отображать» выходные/входные значения от действия к действию.
Теперь он работает просто отлично:
Итак, давайте посмотрим на задачу мастерской:
- Создайте действие, которое принимает строковый параметр (текст), содержащий предложение. Возвращает массив, содержащий отдельные слова в предложении.
«Здравствуйте, меня зовут Джеймс» –› [«Привет», «мое», «имя», «есть», «Джеймс»]
- Создайте действие, которое принимает массив слов и возвращает массив с перевернутыми словами.
["Привет", "мой", "имя", "это", "Джеймс"] –> ["Джеймс", "это", "имя", "мой", "Привет"]
- Создайте действие, которое принимает массив слов и возвращает строку, созданную путем объединения слов в предложение.
["Джеймс", "есть", "имя", "мой", "привет"] -> "Джеймс зовут мой привет"
- Создайте новое действие (слова с обратным предложением), используя последовательность, которая объединяет эти три действия.
- Это новое действие должно принимать параметр (текст) и возвращать предложение (текст), содержащее слова в перевернутой строке.
В общем, довольно банально. Мое первое действие таково:
function main(params) {
var words = params.text.split(' '); return {array:words};
}
Мой второй как раз такой:
function main(params) {
return { array:params.array.reverse()}; }
И мой последний:
function main(params) {
var result = params.array.join(' '); return {text:result};
}
Вот моя последовательность в действии. Кстати, этот аргумент -r
означает просто вернуть результат - мне это нравится.
Первоначально опубликовано по адресу: https://www.raymondcamden.com/2017/01/06/an-example-of-an-openwhisk-sequence