defer-promise 源码解析(Npm library)
基本信息
- version:
v3.0.0 - 功能:利用 Promise 的特性实现两块异步代码同步化
- 传送门:75lb/defer-promise - Github
源码解析
我们先来看看源码,非常简短
/**
* @module defer-promise
*/
function defer () {
if (typeof Promise !== 'undefined' && Promise.defer) {
return Promise.defer()
} else {
var deferred = {}
deferred.promise = new Promise(function (resolve, reject) {
deferred.resolve = resolve
deferred.reject = reject
})
return deferred
}
}
export default defer
先构建一个 Promise 对象,然后将 resolve、reject 方法透出并返回,如此一来我们就可以如下去使用
使用
let solver;
function invoker() {
solver = defer(); // start task
// ... do something async
// setTimeout for example
setTimeout(() => {
solver.resolve();
}, 10 * 1000);
}
// other place
function otherTask() {
if (solver) {
solver.then(() => {
// ...
})
}
}
// use async await
async function asyncTask() {
if (solver) {
// wait for solver resolved
await solver;
}
}
这是一种非常好的异步代码同步化的一种实践,将异步任务以 Promise 来表示,并透过将 resolve、reject 方法在外部显示的指定任务的完成与否。
相信大家后续在写更复杂的系统的时候总有一天会用到,源码实际上也非常简单,不引库自己造一个也是非常方便的。
参考链接
| Title | Link |
|---|---|
| 75lb/defer-promise - Github | https://github.com/75lb/defer-promise/blob/v3.0.0/index.js |
本文介绍了一个简单的Npm库defer-promise,它通过Promise机制实现了异步代码的同步化处理。defer-promise允许开发者显式地控制异步任务的完成状态,从而简化了复杂系统的异步流程管理。
618

被折叠的 条评论
为什么被折叠?



