promise

package module
v0.0.0-...-4bac06b Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: May 24, 2022 License: MIT Imports: 1 Imported by: 2

README

/**
* @program: promise
*
* @description:
*
* @author: lemo
*
* @create: 2020-07-11 13:20
  **/

package main

import (
"errors"
"log"
"time"

	"github.com/lemonyxk/promise"
)

func main() {

	log.Println("start")

	var r1 = promise.New(func(resolve func(int), reject func(error)) {
		go func() {
			log.Println("r1 start")
			time.Sleep(time.Millisecond * 300)
			resolve(1)
		}()
	})

	var r2 = promise.New(func(resolve func(int), reject func(error)) {
		go func() {
			time.Sleep(time.Millisecond * 200)
			resolve(2)
		}()
	})

	var r3 = promise.New(func(resolve func(int), reject func(error)) {
		go func() {
			time.Sleep(time.Millisecond * 100)
			resolve(3)
		}()
	})

	promise.Race(r1, r2, r3).Then(func(result int) {
		log.Println(result)
	}).Catch(func(err error) {
		log.Println(err)
	})

	promise.All(r1, r2, r3).Then(func(result []int) {
		log.Println(result)
	}).Catch(func(err error) {
		log.Println(err)
	})

	promise.Fall(r1, r2, r3).Then(func(result []int) {
		log.Println(result)
	}).Catch(func(err error) {
		log.Println(err)
	})

	promise.New(func(resolve func(string), reject func(error)) {
		go func() {
			time.Sleep(time.Millisecond * 100)
			reject(errors.New("error"))
			resolve("test1") // not execute
		}()
	}).Catch(func(err error) {
		log.Println("reject:", err)
	}).Then(func(result string) {
		log.Println("resolve:", result)
	}).Finally(func() {
		log.Println("finally")
	})

	log.Println("end")

	promise.Resolve("test").Then(func(result string) {
		log.Println("resolve:", result)
	}).Catch(func(err error) {
		log.Println("reject:", err)
	}).Finally(func() {
		log.Println("finally")
	})

	promise.Reject[string](errors.New("error")).Then(func(result string) {
		log.Println("resolve:", result)
	}).Catch(func(err error) {
		log.Println("reject:", err)
	}).Finally(func() {
		log.Println("finally")
	})

	// 2022/05/16 18:45:24 start
	// 2022/05/16 18:46:00 r1 start
	// 2022/05/16 18:45:24 3
	// 2022/05/16 18:45:24 [1 2 3]
	// 2022/05/16 18:45:24 [1 2 3]
	// 2022/05/16 18:45:24 reject: test
	// 2022/05/16 18:45:24 finally
	// 2022/05/16 18:45:24 end

	// signalChan := make(chan os.Signal, 1)
	// signal.Notify(signalChan, os.Kill)
	// <-signalChan
}

Documentation

Index

Constants

This section is empty.

Variables

This section is empty.

Functions

This section is empty.

Types

type Promise

type Promise[T any] interface {
	Then(func(T)) Promise[T]
	Catch(func(error)) Promise[T]
	Finally(func())
}

func All

func All[T any](promises ...Promise[T]) Promise[[]T]

func Fall

func Fall[T any](promises ...Promise[T]) Promise[[]T]

func New

func New[T any](state func(resolve func(T), reject func(error))) Promise[T]

func Race

func Race[T any](promises ...Promise[T]) Promise[T]

func Reject

func Reject[T any](err error) Promise[T]

func Resolve

func Resolve[T any](result T) Promise[T]

Directories

Path Synopsis

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL