我的整个项目都使用(Bluebird)Promises,但是有一个使用EventEmitter的特定库。
我想要实现以下目标:
Promise.on('connect', function() {
x.doSomething();
}).then(function() {
return new Promise(function(resolve) {
y.doAction(resolve); // this will result in `eventB` getting emitted
});
}).on('eventB', function() {
z.handleEventB();
}).then(function() {
z.doSomethingElse();
});
我在Promises链中读了EventEmitter的答案。这给了我一种执行’connect’事件的回调的方法。这是我到目前为止所到之处
var p = new Promise(function(resolve) {
emitter.on('connect', resolve);
});
p.on = function() {
emitter.on.apply(emitter, arguments);
return p;
};
p.on('connect', function() {
x.doSomething();
}).then(function() {
return new Promise(function(resolve) {
y.doAction(resolve); // this will result in eventB getting emitted
});
});
现在如何进一步链接“ eventB”?
我假设您想为每个事件做不同的事情。即使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 triggered
eventBHappened.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 triggered
waitForEvent( 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 triggered
waitForEvent( 'eventB' ).then( function(){
return z.doSomething()
})
使用mui.trigger()方法可以动态触发特定DOM元素上的事件。 .trigger( element , event , data ) element Type: Element 触发事件的DOM元素 event Type: String 事件名字,例如:'tap'、'swipeleft' data Type: Object 需要传递给事件的业务参数 示例 自动触发按钮的点击事件: var
问题内容: 我有3个文件: js_json.js->用于我的json代码 javascript.js->用于我的javascript函数 index.php 这里的代码为: 这是我的代码: 这里的代码: 我的问题是: 当我单击链接“ Hola Test 1”时,它将起作用并显示消息。问题是,在单击选择选项之后,出现了链接“ Hola Test”,然后单击该链接(“ Hola Test”),该消息没
问题内容: 我有一个带有一列复选框的GridView(GridView的其余部分正在从数据库中填充)。我正在使用AJAX执行不同的功能,并且想知道我是否只是在正确的位置调用了OnCheckedChanged事件。是否应该将其包装在某种UpdatePanel中?我对这一切的工作方式仍然很陌生…基本上,我的目标是在选中复选框后更改数据库中的位值。我知道该怎么做的逻辑,我只是不知道我是否以正确的方式
我正在为android创建一个phonegap应用程序,并想使用一些phonegap事件,如“恢复”、“暂停”、“后退按钮”等,但除了“deviceready”事件外,这些事件都不会被触发。以下是我的javascript代码,请检查我是否犯了任何错误: “ondeviceredy()”函数中的警报正在工作。 请帮忙,提前谢谢。
我有一个表单,其中有一条错误消息,如下例所示: http://codepen.io/anon/pen/dYWyEM?editors=101 重现问题的步骤如下: 打开coDepen链接后, 1)专注于输入领域 2) 按提交按钮 3) 由于首先触发模糊事件,因此首先隐藏错误消息,从而更改提交按钮的位置。因此,点击事件根本没有注册,我需要再次点击以提交表单。 有没有办法先发送提交事件? 我需要检测触发
我正在使用Amazon Transcripbe服务,并试图让CloudWatch事件激发一个Lambda函数,该函数执行对我的API的POST请求。 下面是Lambda函数 我已经将CloudWatch事件配置为监听Amazon Transcripbe服务,特别是监听作业状态更改为或。 这是我认为我的应用程序工作的唯一方式,转录作业是通过亚马逊转录服务调用的,然后当它完成时,点击我的API来更新我