util/promise.lua
changeset 12753 eb9814372c54
parent 12593 39ae08180c81
child 12754 c882d2460bb1
equal deleted inserted replaced
12752:7b9de8109a90 12753:eb9814372c54
    55 	promise._pending_on_rejected = nil;
    55 	promise._pending_on_rejected = nil;
    56 	return true;
    56 	return true;
    57 end
    57 end
    58 
    58 
    59 local function new_resolve_functions(p)
    59 local function new_resolve_functions(p)
    60 	local resolved = false;
       
    61 	local function _resolve(v)
    60 	local function _resolve(v)
    62 		if resolved then return; end
       
    63 		resolved = true;
    61 		resolved = true;
    64 		if is_promise(v) then
    62 		if is_promise(v) then
    65 			v:next(new_resolve_functions(p));
    63 			v:next(new_resolve_functions(p));
    66 		elseif promise_settle(p, "fulfilled", next_fulfilled, p._pending_on_fulfilled, v) then
    64 		elseif promise_settle(p, "fulfilled", next_fulfilled, p._pending_on_fulfilled, v) then
    67 			p.value = v;
    65 			p.value = v;
    68 		end
    66 		end
    69 
    67 
    70 	end
    68 	end
    71 	local function _reject(e)
    69 	local function _reject(e)
    72 		if resolved then return; end
       
    73 		resolved = true;
       
    74 		if promise_settle(p, "rejected", next_rejected, p._pending_on_rejected, e) then
    70 		if promise_settle(p, "rejected", next_rejected, p._pending_on_rejected, e) then
    75 			p.reason = e;
    71 			p.reason = e;
    76 		end
    72 		end
    77 	end
    73 	end
    78 	return _resolve, _reject;
    74 	return _resolve, _reject;