@@ -78,14 +78,6 @@ pub const FetchContext = struct {
7878 .url = self .url ,
7979 };
8080 }
81-
82- pub fn destructor (self : * FetchContext ) void {
83- if (self .transfer ) | _ | {
84- self .promise_resolver .reject ("TypeError" ) catch unreachable ;
85- self .promise_resolver .deinit ();
86- self .transfer = null ;
87- }
88- }
8981};
9082
9183// https://developer.mozilla.org/en-US/docs/Web/API/Window/fetch
@@ -122,9 +114,6 @@ pub fn fetch(input: RequestInput, options: ?RequestInit, page: *Page) !Env.Promi
122114 .url = req .url ,
123115 };
124116
125- // Add destructor callback for FetchContext.
126- try page .main_context .destructor_callbacks .append (arena , Env .DestructorCallback .init (fetch_ctx ));
127-
128117 try page .http_client .request (.{
129118 .ctx = @ptrCast (fetch_ctx ),
130119 .url = req .url ,
@@ -200,15 +189,18 @@ pub fn fetch(input: RequestInput, options: ?RequestInit, page: *Page) !Env.Promi
200189 .error_callback = struct {
201190 fn errorCallback (ctx : * anyopaque , err : anyerror ) void {
202191 const self : * FetchContext = @ptrCast (@alignCast (ctx ));
203- if ( self .transfer != null ) {
204- self .transfer = null ;
192+ defer self .promise_resolver . deinit ();
193+ self .transfer = null ;
205194
206- log .err (.http , "error" , .{
207- .url = self .url ,
208- .err = err ,
209- .source = "fetch error" ,
210- });
195+ log .err (.http , "error" , .{
196+ .url = self .url ,
197+ .err = err ,
198+ .source = "fetch error" ,
199+ });
211200
201+ // We throw an Abort error when the page is getting closed so,
202+ // in this case, we don't need to reject the promise.
203+ if (err != error .Abort ) {
212204 self .promise_resolver .reject (@errorName (err )) catch unreachable ;
213205 }
214206 }
0 commit comments