Evento de objeto
El módulo de eventos proporciona un objeto de evento para operaciones colaborativas de datos compartidos. Permite operaciones síncronas entre múltiples fibras (corrutinas) para multitarea cooperativa. El objeto de evento tiene tres métodos: esperar, pulsar y borrar. El método de espera bloqueará la fibra actual hasta que se active el evento, el método de pulso activará todas las fibras que esperan el evento y el método de borrado restablecerá el indicador de evento. a falso mediante el usocoroutine.EventMódulos, los desarrolladores pueden controlar la secuencia de ejecución y el intercambio de datos entre fibras para implementar una lógica empresarial compleja.
Por ejemplo, supongamos que necesitamos compartir datos entre dos fibras, pero su orden de ejecución es incierto. Puede controlar el orden de ejecución de las fibras a través de un objeto de evento para asegurarse de que una fibra se ejecute antes de que se active la otra fibra.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19const coroutine = require('coroutine');
var evt = new coroutine.Event();
coroutine.start(function() {
console.log('[1] wait for event');
evt.wait();
console.log('[1] receive event');
});
coroutine.start(function() {
loop: for (var i = 0; i < 10; i++) {
console.log('[2] do some work');
if (i === 5) {
evt.pulse();
}
coroutine.sleep(1000);
}
});
En el ejemplo anterior, creamos un objeto de evento evt, usamos el método de espera en la fibra 1 para esperar a que se active el evento y activamos el evento en la fibra 2 a través del método de pulso, cuando i es igual a 5, la fibra 2 activa el evento. event , la supervisión de eventos activa la Fibra 1 y continúa ejecutándose. En este proceso no se utilizan bloqueos u otras herramientas de sincronización entre las dos fibras, pero garantizan la sincronización de datos a nivel de fibra.
relación de herencia
Constructor
Event
constructor de objetos de eventos
1new Event(Boolean value = false);
Parámetros de llamada:
- value: Booleano, especifique si desea esperar, espere verdadero, el valor predeterminado es falso
función miembro
isSet
Determinar si el objeto de evento es verdadero
1Boolean Event.isSet();
resultado devuelto:
- Boolean, devuelve verdadero si el evento es verdadero
set
Active el evento (cambie el estado del evento a verdadero) y llame a pulse()
1Event.set();
pulse
Activar todas las fibras esperando este evento
1Event.pulse();
clear
Restablecer evento (cambiar el estado del evento a falso)
1Event.clear();
wait
esperar un evento
1Event.wait();
acquire
adquirir la propiedad de la cerradura
1Boolean Event.acquire(Boolean blocking = true);
Parámetros de llamada:
- blocking: Booleano, especifique si esperar, si es verdadero, espere, el valor predeterminado es verdadero
resultado devuelto:
- Boolean, devuelve si el bloqueo se ha adquirido con éxito, verdadero significa que el bloqueo se ha adquirido con éxito
El método de adquisición se usa para adquirir la propiedad del candado, y este método devuelve verdadero inmediatamente cuando el candado está en un estado adquirible.
Cuando no se puede adquirir el bloqueo y el bloqueo es verdadero, la fibra actual entra en estado latente. Cuando otras fibras liberan el bloqueo, este método devuelve verdadero.
Cuando el bloqueo no está disponible y el bloqueo es falso, el método devuelve falso.
release
liberar bloqueo de propiedad
1Event.release();
Este método libera la propiedad del candado o arroja un error si la fibra actual no posee el candado.
count
Consultar el número actual de tareas en espera
1Integer Event.count();
resultado devuelto:
- Integer, devuelve el número de tareas
toString
Devuelve la representación de cadena del objeto, generalmente devuelve "[Objeto nativo]", el objeto se puede volver a implementar de acuerdo con sus propias características
1String Event.toString();
resultado devuelto:
- String, devuelve una representación de cadena del objeto
toJSON
Devuelve la representación en formato JSON del objeto, generalmente devuelve una colección de propiedades legibles definidas por el objeto
1Value Event.toJSON(String key = "");
Parámetros de llamada:
- key: Cadena, no utilizada
resultado devuelto:
- Value, que devuelve un valor serializable JSON