0.1.1 • Published 5 months ago

@kanziw/promise v0.1.1

Weekly downloads
-
License
MIT
Repository
github
Last release
5 months ago

@kanziw/promise

npm version license npm downloads

defer

Handle promise resolve/reject manually.

import { defer } from '@kanziw/promise'

async function rollbackableInsert() {
  const commitOrRollback = defer<void>()
  const insertedId = defer<string>()

  const txPromise = db.withTransaction(async conn => {
    const { insertId } = await conn.execute(qb.insertInto('table').values({}))
      .then(insertedId.resolve)
      .catch(err => {
        insertedId.reject(err)
        throw err
      });

    await commitOrRollback.promise
  })

  const commit = async () => {
    commitOrRollback.resolve()
    return txPromise
  };

  return {
    insertId: await insertedId.promise,
    commit,
    rollback: deferWaitTransaction.reject,
  }
}

const { insertId, commit, rollback } = await rollbackableInsert()

try {
  // some business logic
  await commit()
} catch (err) {
  await rollback()
  throw err
}
0.1.1

5 months ago

0.1.0

2 years ago