Comparison

net/http/server.lua @ 10395:faa4fcc78b14

net.http.server: Handle promises from http handlers
author Kim Alvefur <zash@zash.se>
date Fri, 01 Nov 2019 22:31:15 +0100
parent 10394:955e54e451dc
child 10396:3278f2a31a0a
comparison
equal deleted inserted replaced
10394:955e54e451dc 10395:faa4fcc78b14
11 local xpcall = require "util.xpcall".xpcall; 11 local xpcall = require "util.xpcall".xpcall;
12 local traceback = debug.traceback; 12 local traceback = debug.traceback;
13 local tostring = tostring; 13 local tostring = tostring;
14 local cache = require "util.cache"; 14 local cache = require "util.cache";
15 local codes = require "net.http.codes"; 15 local codes = require "net.http.codes";
16 local promise = require "util.promise";
16 local errors = require "util.error"; 17 local errors = require "util.error";
17 local blocksize = 2^16; 18 local blocksize = 2^16;
18 19
19 local _M = {}; 20 local _M = {};
20 21
189 end 190 end
190 elseif result_type == "string" then 191 elseif result_type == "string" then
191 body = result; 192 body = result;
192 elseif errors.is_err(result) then 193 elseif errors.is_err(result) then
193 body = events.fire_event("http-error", { request = request, response = response, code = result.code, error = result }); 194 body = events.fire_event("http-error", { request = request, response = response, code = result.code, error = result });
195 elseif promise.is_promise(result) then
196 result:next(function (ret)
197 handle_result(request, response, ret);
198 end, function (err)
199 handle_result(request, response, err);
200 end);
201 return true;
194 elseif result_type == "table" then 202 elseif result_type == "table" then
195 for k, v in pairs(result) do 203 for k, v in pairs(result) do
196 if k ~= "headers" then 204 if k ~= "headers" then
197 response[k] = v; 205 response[k] = v;
198 else 206 else