回调 - JavaScript 挑战
您可以在 github 仓库中找到这篇文章中的所有代码。
异步编程回调相关的挑战
在特定秒后调用回调
/** * @param {function} callbackfn * @param {delay} number * @return {object} */ function invokelater(callbackfn, delay) { const timerid = settimeout(() => { callbackfn(null, 'run'); }, delay); return { clear: () => cleartimeout(timerid), } } // usage example const cancel = invokelater((err, data) => { console.log(data); cancel.clear(); }, 2000);
压扁重击
/** * @param {function} fn * @return {function} */ function flattenThunk(fn) { return function (callbackFn) { function resolveThunk(err, result) { if (err) { callbackFn(err, undefined); return; } if (typeof result === 'function') { result(resolveThunk); } else { callbackFn(undefined, result); } } fn(resolveThunk); } } // Usage example function fn1(callbackFn) { setTimeout(() => { callbackFn(null, 'ok'); }, 10); } function fn2(callbackFn) { setTimeout(() => { callbackFn(null, fn1); }, 10); } function fn3(callbackFn) { setTimeout(() => { callbackFn(null, fn2); }, 10); } flattenThunk(fn3)((err, data) => { console.log(data); // 'ok' });
参考
- 回调(计算机编程)- wikipedia.org
- 回调函数 - mdn
- thunk - wikipedia.org
- 54。压平 thunk - bfe.dev
以上就是回调 - JavaScript 挑战的详细内容,更多请关注其它相关文章!