1.0.0 • Published 8 years ago

serial-async v1.0.0

Weekly downloads
3
License
MIT
Repository
github
Last release
8 years ago

serial-async

Build Status NPM version

Serialization async function(promise)

Example

const transaction = require(".")();

const asyncStorage = {
    storage: {
        foo: "bar",
    },
    get(key) {
        return new Promise((resolve, reject) => {
            if (key === undefined) {
                resolve(this.storage);
            } else {
                resolve(this.storage[key]);
            }
        });
    },
    set(key, val) {
        return new Promise((resolve, reject) => {
            this.storage[key] = val;
            resolve();
        });
    },
};

function upper() {
    return asyncStorage.get("foo").then(val => {
        // val === "bar"
        return new Promise((resolve, reject) => {
            // looooog time
            setTimeout(() => {
                // if that is normal call, now asyncStorage.storage.foo is `biz`,
                // but val still is `bar`.
                resolve(asyncStorage.set("foo", String(val).toUpperCase()));
            }, 100);
        });
    });
}
function setBiz() {
    return asyncStorage.get("foo").then(val => {
        return asyncStorage.set("foo", "biz");
    });
}

// normal
Promise.all([
    upper(),
    setBiz(),
]).then(() => {
    console.log("normal:", asyncStorage.storage); // result: { foo: "BAR" }
});

// use transaction
Promise.all([
    transaction(upper),
    transaction(setBiz),
]).then(() => {
    console.log("transaction:", asyncStorage.storage); // result: { foo: "biz" }
});