blob: 3d7a70dc2f510527344641b07185d1ec8e77e53b [file] [log] [blame]
/*
* Copyright (C) Nginx, Inc.
*/
#ifndef _NJS_PROMISE_H_INCLUDED_
#define _NJS_PROMISE_H_INCLUDED_
typedef enum {
NJS_PROMISE_PENDING = 0,
NJS_PROMISE_FULFILL,
NJS_PROMISE_REJECTED
} njs_promise_type_t;
typedef struct {
njs_value_t promise;
njs_value_t resolve;
njs_value_t reject;
} njs_promise_capability_t;
typedef struct {
njs_promise_type_t state;
njs_value_t result;
njs_queue_t fulfill_queue;
njs_queue_t reject_queue;
njs_bool_t is_handled;
} njs_promise_data_t;
njs_int_t njs_promise_constructor(njs_vm_t *vm, njs_value_t *args,
njs_uint_t nargs, njs_index_t unused);
njs_promise_capability_t *njs_promise_new_capability(njs_vm_t *vm,
njs_value_t *constructor);
njs_function_t *njs_promise_create_function(njs_vm_t *vm, size_t context_size);
njs_int_t njs_promise_perform_then(njs_vm_t *vm, njs_value_t *value,
njs_value_t *fulfilled, njs_value_t *rejected,
njs_promise_capability_t *capability);
njs_promise_t *njs_promise_resolve(njs_vm_t *vm, njs_value_t *constructor,
njs_value_t *x);
extern const njs_object_type_init_t njs_promise_type_init;
#endif /* _NJS_PROMISE_H_INCLUDED_ */