新承诺((解决,拒绝)=>{ const obj=新的MyEventEmitter(); obj.onsuccess=(event)=>{resolve(event.result);}; obj.onerror=(event)=>{拒绝(event.error);}; });
让外部解决; 让外部拒绝; new Promise((解决,拒绝)=>{ outside解析=解析; outsideReject=拒绝; });
onClick=函数(){ outsideResolve(); }
新承诺((解决,拒绝)=>{ const obj=新的MyEventEmitter(); obj.onsuccess=(event)=>{resolve(event.result);}; obj.onerror=(event)=>{拒绝(event.error);}; });
让外部解决; 让外部拒绝; new Promise((解决,拒绝)=>{ outside解析=解析; outsideReject=拒绝; });
onClick=函数(){ outsideResolve(); }
承诺
var promiseResolve,promiseReject; var promise=新promise(函数(resolve,reject){ promiseResolve=解决; promiseReject=拒绝; }); promiseResolve();
承诺解决()
承诺解决()
.捕捉
.捕捉
类延期{ 构造函数(){ this.promise=新承诺((解决,拒绝)=>{ this.reject=拒绝 this.resolve=解决 }) } } 函数asyncAction(){ var dfd=新的延迟() setTimeout(()=>{ dfd.解析(42) }, 500) 返回dfd.承诺 } asyncAction().then(结果=>{ console.log(结果)//42 })
函数Deferred(){ var self=这个; this.promise=新承诺(功能(解决、拒绝){ self.reject=拒绝 self.resolve=解决 }) } 函数asyncAction(){ var dfd=新的延迟() setTimeout(函数(){ dfd.解析(42) }, 500) 返回dfd.承诺 } asyncAction().then(函数(结果){ console.log(结果)//42 })
const p=新承诺((解决,拒绝)=>{ this.onclick=解决; });
⚠️ 编者注 :我不再推荐这种模式,因为在写作时,
承诺.原型.最终 还不是一件事,然后就变成了一件事……这可能会发生在其他方法上,所以我建议您使用
决定 和
拒绝 改为函数:
函数createDeferredPromise(){ 让我们解决 让拒绝 const promise=新promise((thisResolve,thisReject)=>{ resolve=此解决 拒绝=thisReject }) return Object.assign(promise,{resolve,reject}) }
去投票支持别人的答案。
类DeferredPromise{ 构造函数(){ 这个_ 诺言=新诺言((解决,拒绝)=>{ //将解析和拒绝函数分配给“this”` //使它们在类实例上可用 this.resolve=解决; this.reject=拒绝; }); //绑定`then`和`catch`以实现与Promise相同的接口 this.then=这个_ 承诺。然后。绑定(this.promise); this.catch=这个_ promise.catch.bind(this.promise); this.finally=这个_ promise.finally.bind(this.promise); this[Symbol.toStringTag]=“承诺”; } } const deferred=新的DeferredPromise(); console.log('等待2秒…'); setTimeout(()=>{ 延迟。解决(“哇!”); }, 2000); 异步函数someAsyncFunction(){ const值=等待延迟; console.log(值); } someAsyncFunction();
函数createPromise(处理程序){ var解析,拒绝; var promise=新promise(函数(_resolve,_reject){ 解决=重新解决; 拒绝=拒绝; if(处理程序)处理程序(解析、拒绝); }) promise.resolve=解决; promise.reject=拒绝; 回报承诺; } //创建 var promise=创建承诺() promise.then(函数(数据){alert(数据)}) //从外部解决 承诺.解决(200)
常数createPromise=()=>{ let解析器; 返回[ 新承诺((解决,拒绝)=>{ resolver=解析; }), 分解器, ]; }; const[promise,resolver]=createPromise(); promise.then(value=>console.log(value)); setTimeout(()=>解析器('foo'),1000);
>foo公司
导出常量递延=<T>()=>{ 让我们解决!: (值:T|PromiseLike<T>)=>无效; 让我们拒绝!: (原因?:未知)=>无效; const promise=新promise<T>((res,rej)=>{ 解析=res; 拒绝=拒绝; }); 返回{解决、拒绝、承诺}; };
const{promise,resolve}=deferred<string>(); promise.then((值)=>console.log(值));// 没有什么 解析('foo');// console.log:foo
函数Deferred(){ 让决心; 让拒绝; const promise=新promise((res,rej)=>{ 解析=res; 拒绝=拒绝; }); 返回{承诺,解决,拒绝}; }
const{promise,resolve,reject}=延迟(); 显示确认对话框({ 确认:解决, 取消:拒绝 }); 回报承诺;
常数dfd=$。 延期(); 显示确认对话框({ 确认:dfd.解决, 取消:dfd.拒绝 }); return dfd.promise();
return new Promise((resolve,reject)=>{ 显示确认对话框({ 确认:解决, 取消:拒绝 }); });
函数flatPromise(){ 让决心,拒绝; const promise=新的promise((res,rej)=>{ 解析=res; 拒绝=拒绝; }); 返回{承诺、解决、拒绝}; }
函数doSomethingAsync(){ //得到你的承诺和回电 const{resolve,reject,promise}=flatPromise(); //做一些令人惊奇的事情。。。 setTimeout(()=>{ 解决(“one!”); }, 500); //把你的承诺传递给世界 回报承诺; }
函数flatPromise(){ 让决心,拒绝; const promise=新promise((res,rej)=>{ 解析=res; 拒绝=拒绝; }); 返回{承诺、解决、拒绝}; } 函数doSomethingAsync(){ //得到你的承诺和回电 const{resolve,reject,promise}=flatPromise(); //做一些令人惊奇的事情。。。 setTimeout(()=>{ 下定决心(“下定决心!”); }, 500); //把你的承诺传递给世界 回报承诺; } (异步函数run(){ const result=等待doSomethingAsync() .catch(err=>console.error('rejected with',err)); console.log(结果); })();
类延期{ 构造函数(处理程序){ this.promise=新承诺((解决,拒绝)=>{ this.reject=拒绝; this.resolve=解决; 处理程序(解析、拒绝); }); this.promise.resolve=本解决方案; this.promise.reject=此.reject; 返回this.promise; } 承诺; 解决; 拒绝; } //如何使用。 const promise=new Deferred((解析,拒绝)=>{ //像正常的承诺一样使用。 }); promise.resolve();// 从任何上下文进行解析。
导出默认类递延<T>{ 私有解析:(值:T)=>void=()=>{}; 私有对象:(值:T)=>void=()=>{}; private _promise:承诺<T>=新承诺<T>((解决,拒绝)=>{ 这个_ 拒绝=拒绝; 这个_ resolve=解决; }) public get promise():承诺{ 返回这个_ 承诺; } 公共解析(值:T){ 这个_ 解析(值); } 公共拒绝(值:T){ 这个_ 拒绝(价值); } }
函数defer(obj){ obj.promise=新承诺((resolve,reject)=>{ obj.resolve=解决; obj.reject=拒绝; }); }
DOMContentLoaded(evt)上的函数{ 让所有=[];// 一系列承诺 全局={};// 其他地方使用的全局对象 推迟(glob); all.push(全球承诺); //使用callback=resolveGlob()启动异步进程 const myFont=新FontFace(“myFont”,“url(myFont.woff2)”); document.fonts.add(myFont); myFont.load(); all.push[myFont]; Promise.all(all).then(()=>{runIt();},(v)=>{alert(v);}); } //... 函数resolveGlob(){ glob.resolve(); } 函数runIt(){}//在所有promise解析后运行
函数defer(obj={}){ obj.promise=新承诺((resolve,reject)=>{ obj.resolve=解决; obj.reject=拒绝; }); 返回对象; } let deferred=defer();
类延期{ 构造函数(){ this.promise=新承诺((解决,拒绝)=>{ this.resolve=解决; this.reject=拒绝; }); } } let deferred=新的deferred();
导出默认函数usePromise(){ 常量noop=()=>{}; let localResolve:(value:T|PromiseLike<T>)=>void=noop; let-localReject:(原因?:未知)=>void=noop; const promise=新promise(解决,拒绝)=>{ localResolve=解析; localReject=拒绝; }); 返回{ 承诺, 解析:localResolve, 拒绝:localReject, }; } //用法 const{promise,resolve,reject}=usePromise(); //示例 const triggerEl=document.querySelector('.trigger'); const someEl=document.querySelector('.dummy-element'); const{promise,resolve}=usePromise(); someEl.addEventListener('transitionend',()=>{ resolve(); }); triggerEl.addEventListener('click',async()=>{ someEl.classList.add('fadeout'); 等待承诺; //在移除元件之前,等待过渡结束 someEl.remove(); });
函数getPromise(){ 变量_resolve,_reject; var promise=新promise((resolve,reject)=>{ _拒绝=拒绝; _resolve=解决; }); promise.resolve_ex=(值)=>{ _解析(值); }; promise.reject_ex=(值)=>{ _拒绝(价值); }; 回报承诺; }
var promise=getPromise(); 承诺。然后(值=>{ console.info(“承诺已经实现:”+值); }); promise.resolve_ex(“你好”); //或拒绝的版本 //promise.reject_ex(“再见”);
导出类递延<T>{ 公开只读承诺:承诺 私有resolveFn!: (值:T|PromiseLike<T>)=>无效 私人拒绝Fn!: (原因?:任何)=>无效 公共构造函数(){ this.promise=新承诺{ this.resolveFn=解决 this.rejectFn=拒绝 }) } 公众拒绝(原因?:任何):无效{ this.rejectFn(理由) } 公共解析(param:T):void{ this.resolveFn(参数) } }
函数myPromiseReturningFunction(){ return new Promise(解决=>{ window.addEventListener(“myCustomEvent”,(event)=>{ 解决(event.detail); }) }) } myPromiseReturningFunction()。然后(结果=>{ 警报(结果) }) document.getElementById(“p”).addEventListener(“点击”,()=>{ window.dispatchEvent(新的CustomEvent(“myCustom事件”,{detail:“它可以工作!”}) })
单击我</p>
const promise=promise.exposed().then(console.log); promise.resolve(“这应该显示在控制台中。”);
const promise=promise.exposed(函数(resolve,reject){ setTimeout(函数(){ 决心(“我几乎睡着了。”) }, 100000); }).then(console.log); setTimeout(函数(){ 诺言。决心(“我不想等那么久。”); }, 100);
const createExposedPromise=require(“@inf3rno/promise.exposed/noConflict”); const promise=createExposedPromise().then(console.log); promise.resolve(“这应该显示在控制台中。”);
从“manual-promise”导入{manual-promise}; const prom=新的ManualPromise(); prom.解决(2); //行动仍然可以在承诺范围内进行 const prom2=新的ManualPromise((解析,拒绝)=>{ // ... 代码 }); 新的ManualPromise()Promise实例===true
类锁定{ #锁定;// 承诺得到解决(发布时) 释放;// 释放锁 id;// 锁的Id 构造函数(id){ this.id=id 这个# lock=新承诺((解决)=>{ this.release=()=>{ if(解决){ resolve() }其他{ 承诺.resolve() } } }) } get(){return this.#lock} }
let lock=新锁(…some id…); ... lock.get().then()=>{console.log('已解决/已释放')}) lock.release()//排除“已解析/已释放”
让resolvePromise; 让承诺实现; const setPromise=(解析)=>{ resolvePromise=()=>{ resolve(); thePromise=新的Promise(setPromise); } } thePromise=新的Promise(setPromise); (异步()=>{ 设i=0; while(真){ 让消息=(i%2===0)?' 勾选:“Tock”; document.body.innerHTML=消息; setTimeout(resolvePromise,1000); 等待承诺; i++; } })();
类GroovyPromise{ 构造函数(){ return new Proxy(new Promise((resolve,reject)=>{ this.resolve=解决; this.reject=拒绝; }), { 获取:(target,prop)=> this[prop]|target[prop].bind(target), }); } }
const groovypromise=新groovypromise(); setTimeout(()=>groovypromise.resolve('groovy'),1000); console.log(等待groovypromise);