next
Version:
The React Framework
64 lines (63 loc) • 1.86 kB
JavaScript
Object.defineProperty(exports, "__esModule", {
value: true
});
0 && (module.exports = {
atLeastOneTask: null,
scheduleImmediate: null,
scheduleOnNextTick: null,
waitAtLeastOneReactRenderTask: null
});
function _export(target, all) {
for(var name in all)Object.defineProperty(target, name, {
enumerable: true,
get: all[name]
});
}
_export(exports, {
atLeastOneTask: function() {
return atLeastOneTask;
},
scheduleImmediate: function() {
return scheduleImmediate;
},
scheduleOnNextTick: function() {
return scheduleOnNextTick;
},
waitAtLeastOneReactRenderTask: function() {
return waitAtLeastOneReactRenderTask;
}
});
const scheduleOnNextTick = (cb)=>{
// We use Promise.resolve().then() here so that the operation is scheduled at
// the end of the promise job queue, we then add it to the next process tick
// to ensure it's evaluated afterwards.
//
// This was inspired by the implementation of the DataLoader interface: https://github.com/graphql/dataloader/blob/d336bd15282664e0be4b4a657cb796f09bafbc6b/src/index.js#L213-L255
//
Promise.resolve().then(()=>{
if (process.env.NEXT_RUNTIME === 'edge') {
setTimeout(cb, 0);
} else {
process.nextTick(cb);
}
});
};
const scheduleImmediate = (cb)=>{
if (process.env.NEXT_RUNTIME === 'edge') {
setTimeout(cb, 0);
} else {
setImmediate(cb);
}
};
function atLeastOneTask() {
return new Promise((resolve)=>scheduleImmediate(resolve));
}
function waitAtLeastOneReactRenderTask() {
if (process.env.NEXT_RUNTIME === 'edge') {
return new Promise((r)=>setTimeout(r, 0));
} else {
return new Promise((r)=>setImmediate(r));
}
}
//# sourceMappingURL=scheduler.js.map
;