🌐 AI搜索 & 代理 主页
Skip to content

Commit de48171

Browse files
committed
Deferred: Deprecate setTimeout() usage under latest browsers.
1 parent d2436df commit de48171

File tree

2 files changed

+34
-2
lines changed

2 files changed

+34
-2
lines changed

src/deferred.js

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -40,6 +40,8 @@ function adoptValue( value, resolve, reject, noValue ) {
4040
}
4141
}
4242

43+
var asap = window.queueMicrotask || window.setTimeout;
44+
4345
jQuery.extend( {
4446

4547
Deferred: function( func ) {
@@ -221,7 +223,7 @@ jQuery.extend( {
221223
if ( jQuery.Deferred.getStackHook ) {
222224
process.stackTrace = jQuery.Deferred.getStackHook();
223225
}
224-
window.setTimeout( process );
226+
asap( process );
225227
}
226228
};
227229
}

test/unit/core.js

Lines changed: 31 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1522,7 +1522,37 @@ testIframe(
15221522
}
15231523
);
15241524

1525-
QUnit[ includesModule( "deferred" ) ? "test" : "skip" ]( "jQuery.readyException (original)", function( assert ) {
1525+
QUnit[ includesModule( "deferred" ) && window.queueMicrotask ? "test" : "skip" ]( "jQuery.readyException (microtask)", function( assert ) {
1526+
assert.expect( 2 );
1527+
1528+
var done = assert.async();
1529+
var expected = "Error in jQuery ready #" + Math.random().toString( 36 ).slice( -7 );
1530+
1531+
this.sandbox.stub( jQuery, "readyException" ).callsFake( function( error ) {
1532+
assert.strictEqual( error.message, expected, "jQuery.readyException called with unexpected error" );
1533+
window.setTimeout( function() {
1534+
throw error;
1535+
} );
1536+
} );
1537+
1538+
this.sandbox.stub( window, "setTimeout" ).callsFake( function( fn ) {
1539+
var message;
1540+
try {
1541+
fn();
1542+
} catch ( error ) {
1543+
message = error.message;
1544+
}
1545+
1546+
assert.strictEqual( message, expected, "The error should have been caught" );
1547+
done();
1548+
} );
1549+
1550+
jQuery( function() {
1551+
throw new Error( expected );
1552+
} );
1553+
} );
1554+
1555+
QUnit[ includesModule( "deferred" ) && !window.queueMicrotask ? "test" : "skip" ]( "jQuery.readyException (timer)", function( assert ) {
15261556
assert.expect( 1 );
15271557

15281558
var message;

0 commit comments

Comments
 (0)