提交 42c718af 编写于 作者: A Alex Dima

setImmediate is not available in browsers

上级 b872c17e
...@@ -1082,7 +1082,7 @@ export function domContentLoaded(): TPromise<any> { ...@@ -1082,7 +1082,7 @@ export function domContentLoaded(): TPromise<any> {
return new TPromise<any>((c, e) => { return new TPromise<any>((c, e) => {
const readyState = document.readyState; const readyState = document.readyState;
if (readyState === 'complete' || (document && document.body !== null)) { if (readyState === 'complete' || (document && document.body !== null)) {
window.setImmediate(c); platform.setImmediate(c);
} else { } else {
window.addEventListener('DOMContentLoaded', c, false); window.addEventListener('DOMContentLoaded', c, false);
} }
......
...@@ -6,6 +6,7 @@ ...@@ -6,6 +6,7 @@
'use strict'; 'use strict';
import 'vs/css!./actionbar'; import 'vs/css!./actionbar';
import * as platform from 'vs/base/common/platform';
import * as nls from 'vs/nls'; import * as nls from 'vs/nls';
import * as lifecycle from 'vs/base/common/lifecycle'; import * as lifecycle from 'vs/base/common/lifecycle';
import { TPromise } from 'vs/base/common/winjs.base'; import { TPromise } from 'vs/base/common/winjs.base';
...@@ -139,7 +140,7 @@ export class BaseActionItem implements IActionItem { ...@@ -139,7 +140,7 @@ export class BaseActionItem implements IActionItem {
if (this.options && this.options.isMenu) { if (this.options && this.options.isMenu) {
this.onClick(e); this.onClick(e);
} else { } else {
setImmediate(() => this.onClick(e)); platform.setImmediate(() => this.onClick(e));
} }
}); });
......
...@@ -120,6 +120,20 @@ export const translationsConfigFile = _translationsConfigFile; ...@@ -120,6 +120,20 @@ export const translationsConfigFile = _translationsConfigFile;
const _globals = (typeof self === 'object' ? self : typeof global === 'object' ? global : {} as any); const _globals = (typeof self === 'object' ? self : typeof global === 'object' ? global : {} as any);
export const globals: any = _globals; export const globals: any = _globals;
let _setImmediate: (callback: (...args: any[]) => void) => number = null;
export function setImmediate(callback: (...args: any[]) => void): number {
if (_setImmediate === null) {
if (globals.setImmediate) {
_setImmediate = globals.setImmediate.bind(globals);
} else if (typeof process !== 'undefined' && typeof process.nextTick === 'function') {
_setImmediate = process.nextTick.bind(process);
} else {
_setImmediate = globals.setTimeout.bind(globals);
}
}
return _setImmediate(callback);
}
export const enum OperatingSystem { export const enum OperatingSystem {
Windows = 1, Windows = 1,
Macintosh = 2, Macintosh = 2,
......
...@@ -4,6 +4,7 @@ ...@@ -4,6 +4,7 @@
*--------------------------------------------------------------------------------------------*/ *--------------------------------------------------------------------------------------------*/
import { Promise as WinJSPromise } from './winjs.base'; import { Promise as WinJSPromise } from './winjs.base';
import * as platform from 'vs/base/common/platform';
/** /**
* A polyfill for the native promises. The implementation is based on * A polyfill for the native promises. The implementation is based on
...@@ -53,13 +54,13 @@ export class PolyfillPromise<T = any> implements Promise<T> { ...@@ -53,13 +54,13 @@ export class PolyfillPromise<T = any> implements Promise<T> {
if (!initializing) { if (!initializing) {
resolve(value); resolve(value);
} else { } else {
setImmediate(resolve, value); platform.setImmediate(() => resolve(value));
} }
}, function (err) { }, function (err) {
if (!initializing) { if (!initializing) {
reject(err); reject(err);
} else { } else {
setImmediate(reject, err); platform.setImmediate(() => reject(err));
} }
}); });
initializing = false; initializing = false;
...@@ -74,14 +75,14 @@ export class PolyfillPromise<T = any> implements Promise<T> { ...@@ -74,14 +75,14 @@ export class PolyfillPromise<T = any> implements Promise<T> {
if (!sync) { if (!sync) {
onFulfilled(value); onFulfilled(value);
} else { } else {
setImmediate(onFulfilled, value); platform.setImmediate(() => onFulfilled(value));
} }
}, },
onRejected && function (err) { onRejected && function (err) {
if (!sync) { if (!sync) {
onFulfilled(err); onFulfilled(err);
} else { } else {
setImmediate(onFulfilled, err); platform.setImmediate(() => onFulfilled(err));
} }
} }
)); ));
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册