Это не будет очень сложно, но, поскольку я подумал, что это круто, я решил поделиться этим. В настоящее время я работаю над Семинаром 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