Difference between revisions of "Short Notes on JS"
From PaskvilWiki
(Created page with "== Fetch Patterns == <pre>fetch("url", { options... }) .then((response) => { if (!response.ok) throw new Error('Network response was not ok'); return response...") |
|||
| (2 intermediate revisions by one user not shown) | |||
| Line 1: | Line 1: | ||
| + | == Simple Mapping == | ||
| + | |||
| + | <pre> | ||
| + | let a = {a: 1, b: 2, c: 3}; | ||
| + | |||
| + | Object.keys(a).map(i => console.log(i)); | ||
| + | > a | ||
| + | > b | ||
| + | > c | ||
| + | >> [undefined, undefined, undefined] | ||
| + | |||
| + | a = [1, 2, 3]; | ||
| + | a.map((i, k) => console.log(i, k)); | ||
| + | > 1 0 | ||
| + | > 2 1 | ||
| + | > 3 2 | ||
| + | >> [undefined, undefined, undefined] | ||
| + | |||
| + | // fill() is required here, as it materializes the Array; | ||
| + | // otherwise, Array(8) would be treated as empty array by map() | ||
| + | Array(8).fill().map((_, i) => i * i); | ||
| + | >> [0, 1, 4, 9, 16, 25, 36, 49] | ||
| + | |||
== Fetch Patterns == | == Fetch Patterns == | ||
| Line 13: | Line 36: | ||
console.error('Failed to fetch:', error); | console.error('Failed to fetch:', error); | ||
});</pre> | });</pre> | ||
| + | |||
| + | == Environment Variables in WebPack == | ||
| + | |||
| + | WebPack does not have access to environment (duh), so you need to "bake" any relevant environment variables in the WebPack during build: | ||
| + | <pre>new webpack.DefinePlugin({ | ||
| + | 'process.env': { | ||
| + | NODE_ENV: JSON.stringify(process.env.NODE_ENV), | ||
| + | STAGE: JSON.stringify(process.env.STAGE), | ||
| + | // ... | ||
| + | } | ||
| + | })</pre> | ||
| + | |||
| + | == Debugging in VS Code on Linux == | ||
| + | |||
| + | * install ''Debugger for Chrome'' extension | ||
| + | * open the ''launch.json'' file, and edit as follows: | ||
| + | ** custom profile - ''user-data-dir'' - is used, to make sure you have clean (enough) slate | ||
| + | <pre>{ | ||
| + | // Use IntelliSense to learn about possible attributes. | ||
| + | // Hover to view descriptions of existing attributes. | ||
| + | // For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387 | ||
| + | "version": "0.2.0", | ||
| + | "configurations": [ | ||
| + | { | ||
| + | "type": "chrome", | ||
| + | "request": "launch", | ||
| + | "runtimeExecutable": "/usr/bin/chromium-browser", | ||
| + | "runtimeArgs": ["--remote-debugging-port=9222", "--user-data-dir=/home/user/tmp/remote-profile"], | ||
| + | "name": "Launch Chrome against localhost", | ||
| + | "url": "http://localhost:3000", | ||
| + | "webRoot": "${workspaceFolder}" | ||
| + | } | ||
| + | ] | ||
| + | }</pre> | ||
| + | * run the npm (the port used should correspond to the ''url'' key above) | ||
| + | * hit debug in VS Code, add breakpoints, etc., and enjoy! | ||
| + | ** this will actually open new browser window, as subwindow of VS Code, neat! | ||
Latest revision as of 21:12, 11 December 2020
Simple Mapping
let a = {a: 1, b: 2, c: 3};
Object.keys(a).map(i => console.log(i));
> a
> b
> c
>> [undefined, undefined, undefined]
a = [1, 2, 3];
a.map((i, k) => console.log(i, k));
> 1 0
> 2 1
> 3 2
>> [undefined, undefined, undefined]
// fill() is required here, as it materializes the Array;
// otherwise, Array(8) would be treated as empty array by map()
Array(8).fill().map((_, i) => i * i);
>> [0, 1, 4, 9, 16, 25, 36, 49]
== Fetch Patterns ==
<pre>fetch("url", { options... })
.then((response) => {
if (!response.ok)
throw new Error('Network response was not ok');
return response.json(); // or response.blob(), etc.
})
.then((data) => {
// do something with the data received
})
.catch((error) => {
console.error('Failed to fetch:', error);
});
Environment Variables in WebPack
WebPack does not have access to environment (duh), so you need to "bake" any relevant environment variables in the WebPack during build:
new webpack.DefinePlugin({
'process.env': {
NODE_ENV: JSON.stringify(process.env.NODE_ENV),
STAGE: JSON.stringify(process.env.STAGE),
// ...
}
})
Debugging in VS Code on Linux
- install Debugger for Chrome extension
- open the launch.json file, and edit as follows:
- custom profile - user-data-dir - is used, to make sure you have clean (enough) slate
{
// Use IntelliSense to learn about possible attributes.
// Hover to view descriptions of existing attributes.
// For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387
"version": "0.2.0",
"configurations": [
{
"type": "chrome",
"request": "launch",
"runtimeExecutable": "/usr/bin/chromium-browser",
"runtimeArgs": ["--remote-debugging-port=9222", "--user-data-dir=/home/user/tmp/remote-profile"],
"name": "Launch Chrome against localhost",
"url": "http://localhost:3000",
"webRoot": "${workspaceFolder}"
}
]
}
- run the npm (the port used should correspond to the url key above)
- hit debug in VS Code, add breakpoints, etc., and enjoy!
- this will actually open new browser window, as subwindow of VS Code, neat!