├── .gitignore
├── README.md
├── index.html
├── .jshintrc
├── .travis.yml
├── bin
└── build.js
├── package.json
└── lib
└── index.js
/.gitignore:
--------------------------------------------------------------------------------
1 | node_modules
2 | .DS_Store
3 | *~
4 | coverage
5 | test/test-bundle.js
6 | npm-debug.log
7 | dist
8 | api.md
9 | doc/global.html
10 | doc/index.html
11 |
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 | Testing Async Functions in PouchDB
2 | =====
3 |
4 | Run this:
5 |
6 | npm install
7 | npm run build
8 |
9 |
10 | Then run:
11 |
12 | npm start
13 |
14 | Then open up http://localhost:7777 in a browser.
15 |
16 | In your console,
17 | you should see various tests being run. All of these tests are
18 | defined in `index.js` and are invoked by `index.html`.
19 |
--------------------------------------------------------------------------------
/index.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
14 |
15 |
16 |
--------------------------------------------------------------------------------
/.jshintrc:
--------------------------------------------------------------------------------
1 | {
2 | "curly": true,
3 | "eqeqeq": true,
4 | "immed": true,
5 | "newcap": true,
6 | "noarg": true,
7 | "sub": true,
8 | "undef": true,
9 | "unused": true,
10 | "eqnull": true,
11 | "browser": true,
12 | "node": true,
13 | "strict": true,
14 | "globalstrict": true,
15 | "white": true,
16 | "indent": 2,
17 | "maxlen": 120,
18 | "esnext": true,
19 | "predef": [
20 | "process",
21 | "global",
22 | "require",
23 | "console",
24 | "describe",
25 | "beforeEach",
26 | "afterEach",
27 | "it"
28 | ]
29 | }
--------------------------------------------------------------------------------
/.travis.yml:
--------------------------------------------------------------------------------
1 | language: node_js
2 |
3 | node_js:
4 | - "0.10"
5 | script: npm run $COMMAND
6 | before_script:
7 | - "export DISPLAY=:99.0"
8 | - "sh -e /etc/init.d/xvfb start"
9 | - "sleep 5"
10 |
11 | # Workaround for Selenium #3280 issue
12 | - "sudo sed -i 's/^127\\.0\\.0\\.1.*$/127.0.0.1 localhost/' /etc/hosts"
13 |
14 | env:
15 | global:
16 | - SELENIUM_VERSION=2.42.0
17 | matrix:
18 | - CLIENT=node COMMAND=test
19 | - CLIENT=selenium:firefox COMMAND=test
20 | - CLIENT=selenium:phantomjs COMMAND=test
21 | - COMMAND=coverage
22 |
23 | branches:
24 | only:
25 | - master
26 | - /^pull*$/
27 |
--------------------------------------------------------------------------------
/bin/build.js:
--------------------------------------------------------------------------------
1 | 'use strict';
2 |
3 | var inputFile = "./lib/index.js";
4 | var outputFile = "./dist/async-functions-in-pouchdb.js";
5 | var standalone = "asyncFunctionsInPouchDB";
6 |
7 | var browserify = require("browserify");
8 | var babelify = require("babelify");
9 | var fs = require('fs');
10 |
11 | browserify({ standalone: standalone }).transform(babelify.configure({
12 | experimental: true,
13 | optional: ["runtime"]
14 | }))
15 | .require(inputFile, { entry: true })
16 | .bundle()
17 | .on("error", function (err) { console.log("Error : " + err.message); })
18 | .pipe(fs.createWriteStream(outputFile));
19 |
--------------------------------------------------------------------------------
/package.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "async-functions-in-pouchdb",
3 | "version": "1.0.0",
4 | "description": "Testing ES7 async functions in PouchDB",
5 | "main": "lib/index.js",
6 | "author": "Nolan Lawson ",
7 | "license": "Apache",
8 | "scripts": {
9 | "build": "mkdir -p dist && node ./bin/build.js && npm run min",
10 | "min": "uglifyjs dist/async-functions-in-pouchdb.js -mc > dist/async-functions-in-pouchdb.min.js",
11 | "start": "node node_modules/http-server/bin/http-server -p 7777"
12 | },
13 | "dependencies": {
14 | "babel-runtime": "^4.6.3",
15 | "es3ify": "^0.1.3",
16 | "http-server": "^0.8.0",
17 | "pouchdb": "^3.3.1"
18 | },
19 | "devDependencies": {
20 | "babelify": "^5.0.3",
21 | "browserify": "^9.0.3",
22 | "uglify-js": "^2.4.16"
23 | }
24 | }
25 |
--------------------------------------------------------------------------------
/lib/index.js:
--------------------------------------------------------------------------------
1 | "use strict";
2 |
3 | let PouchDB = require('pouchdb');
4 | let db = new PouchDB('mydb');
5 |
6 | async function demo1() {
7 | try {
8 | // put a document
9 | await db.put({_id: 'doc'}) ;
10 | } catch (err) {
11 | if (err.status !== 409) {
12 | // ignore conflict errors (i.e. the doc already exists)
13 | throw err;
14 | }
15 | }
16 |
17 | // get the doc
18 | let doc = await db.get('doc');
19 |
20 | console.log('here is the doc', doc);
21 | }
22 |
23 | async function demo2() {
24 | // posts a doc inside a try/catch. this should throw an error
25 | async function createNewDoc() {
26 | let response = await db.put({});
27 | return await db.get(response.id);
28 | }
29 |
30 | async function printNewDoc() {
31 | try {
32 | let doc = await createNewDoc();
33 | console.log('posted a new doc', doc);
34 | } catch (err) {
35 | console.log('expected an error, got it', err);
36 | }
37 | }
38 |
39 | printNewDoc();
40 | }
41 |
42 | async function demo3() {
43 | // put multiple docs in a regular for loop
44 | let docs = [{}, {}, {}];
45 | for (let i = 0; i < docs.length; i++) {
46 | let doc = docs[i];
47 | let result = await db.post(doc);
48 | let savedDoc = await db.get(result.id);
49 | console.log('put a new doc in a regular for loop, here it is', savedDoc);
50 | }
51 |
52 | console.log('regular for loop\'s main function finished');
53 | }
54 |
55 | async function demo4() {
56 | // put multiple docs in a loop
57 | let docs = [{}, {}, {}];
58 | for (let doc of docs) {
59 | let result = await db.post(doc);
60 | let savedDoc = await db.get(result.id);
61 | console.log('put a new doc in a forOf loop, here it is', savedDoc);
62 | }
63 |
64 | console.log('forOf loop\'s main function finished');
65 | }
66 |
67 | async function demo5() {
68 | // put multiple docs in a loop
69 | let docs = [{}, {}, {}];
70 | docs.forEach(async function (doc, i) {
71 | console.log('async forEach: starting to wait for ', i);
72 | let result = await db.post(doc);
73 | await db.get(result.id);
74 | console.log('async forEach: done waiting for', i);
75 | });
76 | console.log('async forEach: main function finished');
77 | }
78 |
79 | async function demo6() {
80 | try {
81 | let docs = [{}, {}, {}];
82 |
83 | // also works: let promises = [for (doc of docs) db.post(doc)];
84 | let promises = docs.map((doc) => db.post(doc));
85 |
86 | let results = [];
87 | for (let promise of promises) {
88 | results.push(await promise);
89 | }
90 |
91 | console.log('posted many docs simultaneously, results are ', results);
92 | } catch (err) {
93 | console.log(err);
94 | }
95 | }
96 |
97 | async function demo7() {
98 | try {
99 | let docs = [{}, {}, {}];
100 |
101 | // also works: let promises = [for (doc of docs) db.post(doc)];
102 | let promises = docs.map((doc) => db.post(doc));
103 |
104 | let results = await Promise.all(promises);
105 |
106 | console.log('posted many docs simultaneously using Promise.all, results are ', results);
107 | } catch (err) {
108 | console.log(err);
109 | }
110 | }
111 |
112 | async function demo8() {
113 | try {
114 | let docs = [{}, {}, {}];
115 |
116 | // also works: let promises = [for (doc of docs) db.post(doc)];
117 | let promises = docs.map((doc) => db.post(doc));
118 |
119 | let results = await* promises;
120 |
121 | console.log('posted many docs simultaneously using await*, results are ', results);
122 | } catch (err) {
123 | console.log(err);
124 | }
125 | }
126 |
127 |
128 | module.exports = {
129 | demo1,
130 | demo2,
131 | demo3,
132 | demo4,
133 | demo5,
134 | demo6,
135 | demo7,
136 | demo8
137 | };
138 |
--------------------------------------------------------------------------------