{"id":18397926,"url":"https://github.com/jmgogo/async-js","last_synced_at":"2026-05-01T04:42:12.143Z","repository":{"id":225373603,"uuid":"765435897","full_name":"jmgogo/async-js","owner":"jmgogo","description":"A repo demoing asynchronous functions and HTTP requests in JavaScript.","archived":false,"fork":false,"pushed_at":"2024-03-05T23:33:10.000Z","size":208,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"main","last_synced_at":"2025-04-12T15:54:52.755Z","etag":null,"topics":["async","await","devcontainer","ijavascript","javascript","js","jupyter-notebook","promise"],"latest_commit_sha":null,"homepage":"","language":"Jupyter Notebook","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/jmgogo.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":"2024-02-29T23:04:04.000Z","updated_at":"2024-03-01T21:41:00.000Z","dependencies_parsed_at":"2024-03-06T00:32:05.679Z","dependency_job_id":null,"html_url":"https://github.com/jmgogo/async-js","commit_stats":null,"previous_names":["jgome284/async-js","jmgogo/async-js"],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/jmgogo/async-js","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/jmgogo%2Fasync-js","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/jmgogo%2Fasync-js/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/jmgogo%2Fasync-js/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/jmgogo%2Fasync-js/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/jmgogo","download_url":"https://codeload.github.com/jmgogo/async-js/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/jmgogo%2Fasync-js/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":32485297,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-04-30T13:12:12.517Z","status":"online","status_checked_at":"2026-05-01T02:00:05.856Z","response_time":64,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"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":["async","await","devcontainer","ijavascript","javascript","js","jupyter-notebook","promise"],"created_at":"2024-11-06T02:19:16.842Z","updated_at":"2026-05-01T04:42:12.107Z","avatar_url":"https://github.com/jmgogo.png","language":"Jupyter Notebook","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Asynchronous-ities with iJS! 😺\n\n\u003cp align=\"center\"\u003e\n  \u003ca href=\"https://github.com/jgome284/async-js\"\u003e\n    \u003cimg src=\"imgs/async-js-banner.jpg\" alt=\"Logo\"\u003e\n  \u003c/a\u003e\n\u003c/p\u003e\n\u003ch3 align=\"center\"\u003eForeword\u003c/h3\u003e\n\u003cp align=\"center\"\u003e\n  Notebook detailing asynchronous functions in JavaScript and HTTP Requests.\n  \u003cbr\u003e\n  \u003ca href=\"https://github.com/jgome284/async-js/issues\"\u003eReport Bug\u003c/a\u003e\n  ·\n  \u003ca href=\"https://github.com/jgome284/async-js/issues\"\u003eRequest Feature\u003c/a\u003e\n\u003c/p\u003e\n\u003cbr\u003e\n\n## Table of Contents\n\n- [Asynchronous-ities with iJS! 😺](#asynchronous-ities-with-ijs-)\n  - [Table of Contents](#table-of-contents)\n  - [About](#about)\n  - [Setup](#setup)\n  - [Prerequisites](#prerequisites)\n    - [Docker](#docker)\n    - [VSCode](#vscode)\n  - [Getting Started](#getting-started)\n\n## About\n\nOften in web development, we need to handle asynchronous actions— actions we can wait on while moving on to other tasks. We make requests to networks, databases, or any number of similar operations. JavaScript is non-blocking: instead of stopping the execution of code while it waits, JavaScript uses an event-loop which allows it to efficiently execute other tasks while it awaits the completion of these asynchronous actions.\n\nJavaScript is an interesting language; it's single threaded, but it's built to mimic multi-threaded-isities to free itself from blocking sequential code. It does so by pushing callbacks with promises for handling through a WebAPI. For a good introduction, checkout [this article](https://vahid.blog/post/2021-03-21-understanding-the-javascript-runtime-environment-and-dom-nodes/) and the diagram below.\n\n\u003cp align=\"center\"\u003e\n  \u003cimg src=\"./imgs/js-runtime-env.jpg\" alt=\"JavaScript Engine Diagram\" height=\"450px\"\u003e\n\u003c/p\u003e\n\nThis project provides a playground for asynchronous functions and HTTP requests in JavaScript. It includes a jupyter notebook with iJavaScript that provides several examples. iJavaScript is a Javascript kernel for the [Jupyter notebook](http://jupyter.org/). The Jupyter notebook combines the creation of rich-text documents (including equations, graphs and videos) with the execution of code in a number of programming languages. The execution of code is carried out by means of a kernel that implements the [Jupyter messaging protocol](http://jupyter-client.readthedocs.io/en/latest/messaging.html). The iJavaScript kernel executes Javascript code inside a [Node.js](https://nodejs.org/) session. And thus, it behaves as the Node.js REPL does, providing access to the Node.js standard library and to any installed [npm](https://www.npmjs.com/) modules.\n\n## Setup\n\nThis project is setup with a Dev Container for use on Visual Studio Code. It serves as a full-featured development environment with everything needed to run JavaScript on the jupyter notebook. Dev Containers separate tools, libraries, or runtimes needed for working with a codebase. They aid in continuous integration and testing. Dev containers can be run locally or remotely, in a private or public cloud, in a variety of supporting tools and editors.\n\n[This devcontainer](./.devcontainer/), is built IAW the [dev containers specification](https://containers.dev/implementors/spec/) and tailored for a build environment that leverages Ubuntu. Of note, the devcontainer has git for version control and several extensions installed for Visual Studio Code as development utilities for the IDE.\n\n## Prerequisites\n\n### Docker\n\nTo start, you need to have Docker Engine and Docker Compose on your machine. You can either:\n\n- Install [Docker Desktop](https://www.docker.com/products/docker-desktop/) which includes both Docker Engine and Docker Compose. (Recommended ⭐)\n- Install [Docker Engine](https://docs.docker.com/engine/install/binaries/) and [Docker Compose](https://docs.docker.com/compose/install/standalone/) as standalone binaries. (If it suits your fancy 🤵)\n\n### VSCode\n\nThis devcontainer is setup for development on Visual Studio Code. You should have it installed along with the [remote development pack](https://marketplace.visualstudio.com/items?itemName=ms-vscode-remote.vscode-remote-extensionpack) to enable the IDE's devcontainers functionality.\n\n## Getting Started\n\nTo start, open VS Code in a directory of your choice. Open the terminal and clone this repository with `git clone https://github.com/jgome284/async-js`.\n\nOpen Docker Desktop to run the Docker daemon, a background process that manages and coordinates Docker containers on your system. On VS Code, start the development container by running `Dev Containers: Rebuild and Reopen In Container` in the command palette. It can be accessed with the keyboard shortcut `ctrl + shift + P` on your keyboard.\n\nIf successful, Visual Studio will establish a remote connection to the development container. When it does, feel free to look over the examples on [async-js.ipynb](./async-js.ipynb) and create your own notebook to try working with JavaScript on your own!\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fjmgogo%2Fasync-js","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fjmgogo%2Fasync-js","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fjmgogo%2Fasync-js/lists"}