首页 > 代码库 > 2015/01/23 – 不要对异步回调函数进行同步调用

2015/01/23 – 不要对异步回调函数进行同步调用

  • 绝对不能对异步回调函数(即使在数据已经就绪)进行同步调用。

  • 如果对异步回调函数进行同步调用的话,处理顺序可能会与预期不符,可能带来意料之外的后果。

  • 对异步回调函数进行同步调用,还可能导致栈溢出或异常处理错乱等问题。

  • 如果想在将来某时刻调用异步回调函数的话,可以使用 setTimeout 等异步API。

 

function onReady(fn) {    var readyState = document.readyState;    if (readyState == ‘interactive‘ || readyState === ‘complete‘) {        setTimeout(fn, 0);    } else {        window.addEventListener(‘DOMContentLoaded‘, fn);    }}onReady(function () {    console.log(‘DOM fully loaded and parsed‘);});console.log(‘==Starting==‘);
技术分享
function onReadyPromise() {    return new Promise(function (resolve, reject) {        var readyState = document.readyState;        if (readyState == ‘interactive‘ || readyState === ‘complete‘) {            resolve();        } else {            window.addEventListener(‘DOMContentLoaded‘, resolve);        }    });}onReadyPromise().then(function () {    console.log(‘DOM fully loaded and parsed‘);});console.log(‘==Starting==‘);
Promise 实现

js Promise 迷你书

2015/01/23 – 不要对异步回调函数进行同步调用