栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

事件触发时触发Promise

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

事件触发时触发Promise

我假设您想为每个事件做不同的事情。即使

eventB
由的动作触发
connect
,您也可以将其视为另一种逻辑流。

旁注:为避免对您和其他必须阅读此代码库的人造成混淆,我建议您不要使用其他方法来补充Promise,除非您 非常 详尽地记录了它们。

从您的示例来看,似乎可以进行以下操作。

var Promise = require( 'bluebird' )var emitter = someEmitter()var connected = new Promise( function( resolve ){    emitter.on( 'connect', resolve )})var eventBHappened = new Promise( function( resolve ){    emitter.on( 'eventB', resolve )})connected.then( function(){    return x.doSomething()}).then( function(){    return y.doSomethingElse() // will trigger `eventB` eventually})// this promise stream will begin once `eventB` has been triggeredeventBHappened.then( function(){     return z.doSomething()})

如果您想简化此常数

var p = new Promise( function( resolve ){    emitter.on( 'something', resolve )})

你可以用这样的东西

function waitForEvent( emitter, eventType ){    return new Promise( function( resolve ){        emitter.on( eventType, resolve )    })}

这将上面的代码解决方案变成

var Promise = require( 'bluebird' )var emitter = someEmitter()function waitForEvent( eventEmitter, eventType ){    return new Promise( function( resolve ){        eventEmitter.on( eventType, resolve )    })}waitForEvent( emitter, 'connect' ).then( function(){    return x.doSomething()}).then( function(){    return y.doSomethingElse() // will trigger `eventB` eventually})// this promise stream will begin once `eventB` has been triggeredwaitForEvent( emitter, 'eventB' ).then( function(){     return z.doSomething()})

并且由于Javascript中的函数捕获了定义它们的范围,因此可以将该代码进一步简化为

var Promise = require( 'bluebird' )var emitter = someEmitter()function waitForEvent( type ){    return new Promise( function( resolve ){        //emitter has been captured from line #2        emitter.on( type, resolve )     })}waitForEvent( 'connect' ).then( function(){    return x.doSomething()}).then( function(){    return y.doSomethingElse() // will trigger `eventB` eventually})// this promise stream will begin once `eventB` has been triggeredwaitForEvent( 'eventB' ).then( function(){     return z.doSomething()})


转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/484929.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号