Skip to content

Commit ee8cbf4

Browse files
Added API to work with promises.
1 parent 2b77eee commit ee8cbf4

File tree

4 files changed

+43
-8
lines changed

4 files changed

+43
-8
lines changed

src/njs.h

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -34,6 +34,7 @@ typedef struct njs_function_s njs_function_t;
3434
typedef struct njs_vm_shared_s njs_vm_shared_t;
3535
typedef struct njs_object_init_s njs_object_init_t;
3636
typedef struct njs_object_prop_s njs_object_prop_t;
37+
typedef struct njs_promise_data_s njs_promise_data_t;
3738
typedef struct njs_object_prop_init_s njs_object_prop_init_t;
3839
typedef struct njs_object_type_init_s njs_object_type_init_t;
3940
typedef struct njs_external_s njs_external_t;
@@ -137,6 +138,13 @@ typedef enum {
137138
} njs_wellknown_symbol_t;
138139

139140

141+
typedef enum {
142+
NJS_PROMISE_PENDING = 0,
143+
NJS_PROMISE_FULFILL,
144+
NJS_PROMISE_REJECTED
145+
} njs_promise_type_t;
146+
147+
140148
typedef enum {
141149
#define njs_object_enum_kind(flags) (flags & 7)
142150
NJS_ENUM_KEYS = 1,
@@ -505,6 +513,9 @@ NJS_EXPORT njs_int_t njs_value_is_array(const njs_value_t *value);
505513
NJS_EXPORT njs_int_t njs_value_is_function(const njs_value_t *value);
506514
NJS_EXPORT njs_int_t njs_value_is_buffer(const njs_value_t *value);
507515
NJS_EXPORT njs_int_t njs_value_is_data_view(const njs_value_t *value);
516+
NJS_EXPORT njs_int_t njs_value_is_promise(const njs_value_t *value);
517+
NJS_EXPORT njs_promise_type_t njs_promise_state(const njs_value_t *value);
518+
NJS_EXPORT njs_value_t *njs_promise_result(const njs_value_t *value);
508519

509520
NJS_EXPORT njs_int_t njs_vm_object_alloc(njs_vm_t *vm, njs_value_t *retval,
510521
...);

src/njs_promise.c

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -912,6 +912,28 @@ njs_promise_perform_then(njs_vm_t *vm, njs_value_t *value,
912912
}
913913

914914

915+
njs_promise_type_t
916+
njs_promise_state(const njs_value_t *value)
917+
{
918+
njs_promise_data_t *promise_data;
919+
920+
promise_data = njs_data(&njs_promise(value)->value);
921+
922+
return promise_data->state;
923+
}
924+
925+
926+
njs_value_t *
927+
njs_promise_result(const njs_value_t *value)
928+
{
929+
njs_promise_data_t *promise_data;
930+
931+
promise_data = njs_data(&njs_promise(value)->value);
932+
933+
return &promise_data->result;
934+
}
935+
936+
915937
static njs_int_t
916938
njs_promise_prototype_catch(njs_vm_t *vm, njs_value_t *args, njs_uint_t nargs,
917939
njs_index_t unused, njs_value_t *retval)

src/njs_promise.h

Lines changed: 3 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -7,25 +7,20 @@
77
#define _NJS_PROMISE_H_INCLUDED_
88

99

10-
typedef enum {
11-
NJS_PROMISE_PENDING = 0,
12-
NJS_PROMISE_FULFILL,
13-
NJS_PROMISE_REJECTED
14-
} njs_promise_type_t;
15-
1610
typedef struct {
1711
njs_value_t promise;
1812
njs_value_t resolve;
1913
njs_value_t reject;
2014
} njs_promise_capability_t;
2115

22-
typedef struct {
16+
17+
struct njs_promise_data_s {
2318
njs_promise_type_t state;
2419
njs_value_t result;
2520
njs_queue_t fulfill_queue;
2621
njs_queue_t reject_queue;
2722
njs_bool_t is_handled;
28-
} njs_promise_data_t;
23+
};
2924

3025

3126
njs_int_t njs_promise_constructor(njs_vm_t *vm, njs_value_t *args,

src/njs_value.c

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -538,6 +538,13 @@ njs_value_is_data_view(const njs_value_t *value)
538538
}
539539

540540

541+
njs_int_t
542+
njs_value_is_promise(const njs_value_t *value)
543+
{
544+
return njs_is_promise(value);
545+
}
546+
547+
541548
/*
542549
* ES5.1, 8.12.1: [[GetOwnProperty]], [[GetProperty]].
543550
* The njs_property_query() returns values

0 commit comments

Comments
 (0)