{"id":18879803,"url":"https://github.com/gusenov/seq-exec-js","last_synced_at":"2025-09-25T16:29:33.259Z","repository":{"id":130182144,"uuid":"101164416","full_name":"gusenov/seq-exec-js","owner":"gusenov","description":"Скрипт для организации последовательного исполнения JS-функций посредством механизма обратных вызовов.","archived":false,"fork":false,"pushed_at":"2018-06-19T15:37:58.000Z","size":6,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"master","last_synced_at":"2024-04-25T19:42:36.499Z","etag":null,"topics":["code-execution","javascript","javascript-library"],"latest_commit_sha":null,"homepage":"https://www.npmjs.com/package/seq-exec","language":"JavaScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/gusenov.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2017-08-23T09:45:48.000Z","updated_at":"2018-06-19T15:37:59.000Z","dependencies_parsed_at":"2023-03-20T18:33:01.066Z","dependency_job_id":null,"html_url":"https://github.com/gusenov/seq-exec-js","commit_stats":null,"previous_names":[],"tags_count":1,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/gusenov%2Fseq-exec-js","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/gusenov%2Fseq-exec-js/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/gusenov%2Fseq-exec-js/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/gusenov%2Fseq-exec-js/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/gusenov","download_url":"https://codeload.github.com/gusenov/seq-exec-js/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":239841742,"owners_count":19705981,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["code-execution","javascript","javascript-library"],"created_at":"2024-11-08T06:39:35.948Z","updated_at":"2025-09-25T16:29:28.211Z","avatar_url":"https://github.com/gusenov.png","language":"JavaScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Класс **[SeqExec](seq-exec.js#L1)** и его методы\n\nФайл *[seq-exec.js](seq-exec.js)* содержит класс **[SeqExec](seq-exec.js#L1)** предназначенный для организации последовательного исполнения JS-функций посредством механизма обратного вызова.\n\nМетоды класса **[SeqExec](seq-exec.js#L1)**:\n\n| Название метода         | Описание                                                                         |\n| ----------------------- | -------------------------------------------------------------------------------- |\n| [chain](seq-exec.js#L9) | Позволяет объединить функции в цепочку из последовательно выполняющихся функций. |\n| [loop](seq-exec.js#L38) | Позволяет последовательно выполнить серию повторяющихся операций.                |\n\n# Примеры\n\n## Простой пример: цепочка последовательно выполняющихся функций\n\nВ нижеприведённом примере ключевую роль играет вызов функции **next()**, только после которого происходит переход к исполнению следующей функции:\n\n```js\nSeqExec.chain(function (next) {\n    console.log(\"1\");\n    next(); // перейти к исполнению следующей функции в цепочке\n}).then(function (next) {\n    console.log(\"2\");\n    next(); // перейти к исполнению следующей функции в цепочке\n}).then(function (next) {\n    console.log(\"3\");\n});\n```\n\nВывод:\n\n```text\n$ node example1.js\nExample 1:\n1\n2\n3\n```\n\n## Простой пример: циклы\n\nВ качестве простого примера, демонстрирующего суть метода **SeqExec.loop(loopBodyCallback, stopConditionCallback)** можно привести альтернативную реализацию циклов для JavaScript, без использования конструкций **for** и **while**:\n\n```js\nvar idx = 1;\nSeqExec.loop(function loopBody(cont) {\n    console.log(idx);\n    idx += 1;\n    cont(); // continue\n}, function stopCondition() {\n    return idx \u003e 10 ? true : false;\n});\n```\n\nВывод:\n\n```text\n$ node example2.js\nExample 2:\n1\n2\n3\n4\n5\n6\n7\n8\n9\n10\n``` \n\n# Установка в свой проект\n\n```bash\n$ npm install seq-exec --save\n```\n\n# Публикация npm-пакета\n\nФиксация изменений:\n\n```bash\n$ git add .\n$ git commit -S -m \"0.0.1\"\n$ git tag -s v0.0.1 -m 'signed 0.0.1 tag'\n```\n\nили\n\n```bash\n$ npm version patch\n```\n\nОтправка на [github.com](https://github.com/gusenov/seq-exec-js):\n\n```bash\n$ git push --tags origin master:master\n```\n\nОтправка на [npmjs.com](https://www.npmjs.com/package/seq-exec):\n\n```bash\n$ npm login\n$ npm config ls\n$ npm publish\n```\n\n# Дополнительные пояснения к коду\n\nООП в JavaScript:\n\n- [stackoverflow.com/questions/7694501/class-vs-static-method-in-javascript](https://stackoverflow.com/questions/7694501/class-vs-static-method-in-javascript)\n\nСинхронность и асинхронность в JavaScript:\n\n- [stackoverflow.com/questions/2035645/when-is-javascript-synchronous](https://stackoverflow.com/questions/2035645/when-is-javascript-synchronous)\n- [stackoverflow.com/questions/5187968/how-should-i-call-3-functions-in-order-to-execute-them-one-after-the-other](https://stackoverflow.com/questions/5187968/how-should-i-call-3-functions-in-order-to-execute-them-one-after-the-other)\n- [stackoverflow.com/questions/1859185/how-to-force-sequential-javascript-execution](https://stackoverflow.com/questions/1859185/how-to-force-sequential-javascript-execution)\n\nПромисы:\n\n- [learn.javascript.ru/promise](https://learn.javascript.ru/promise)\n- [artemdemo.me/blog/как-делаются-promise-в-javascript](http://artemdemo.me/blog/%D0%BA%D0%B0%D0%BA-%D0%B4%D0%B5%D0%BB%D0%B0%D1%8E%D1%82%D1%81%D1%8F-promise-%D0%B2-javascript/)\n\nСоздание npm-пакета:\n\n- [docs.npmjs.com/getting-started/publishing-npm-packages](https://docs.npmjs.com/getting-started/publishing-npm-packages)\n- [docs.npmjs.com/misc/developers](https://docs.npmjs.com/misc/developers)\n- [docs.npmjs.com/files/package.json](https://docs.npmjs.com/files/package.json)\n- [spdx.org/licenses](https://spdx.org/licenses/)\n- [eladnava.com/publishing-your-first-package-to-npm](https://eladnava.com/publishing-your-first-package-to-npm/)\n- [gist.github.com/coolaj86/1318304#getting-started-with-npm-as-a-developer](https://gist.github.com/coolaj86/1318304#getting-started-with-npm-as-a-developer)\n\nNode.js:\n\n- [stackoverflow.com/questions/4224606/how-to-check-whether-a-script-is-running-under-node-js](https://stackoverflow.com/questions/4224606/how-to-check-whether-a-script-is-running-under-node-js)\n\nJSLint:\n\n- [jslint.com/help.html](http://www.jslint.com/help.html)\n\nGit:\n\n- [git-scm.com/book/en/v2/Git-Basics-Tagging](https://git-scm.com/book/en/v2/Git-Basics-Tagging)\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fgusenov%2Fseq-exec-js","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fgusenov%2Fseq-exec-js","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fgusenov%2Fseq-exec-js/lists"}