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

用EventEmitter编写异步函数

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

用EventEmitter编写异步函数

我以前从节点上了解到,用事件对象处理的所有内容都会异步执行。

这是不正确的。事件是同步的。添加侦听器时,您只是将回调保存在一个对象中:

this._events[type].push(listener);

发出事件时,您只是在迭代一个数组并调用每个侦听器:

for (i = 0; i < len; i++)      listeners[i].apply(this, args);

源代码:https :
//github.com/joyent/node/blob/master/lib/events.js

这是异步执行吗?我认为不!

你是对的。它的异步,如果你调用任何I /
O功能或使用

setImmediate
nextTick
或定时器,否则,它是同步的。异步编写的同步代码不会将其转换为异步代码。

为什么我要完成回调!要在异步n之前输出?

因为当您收到“完成”回调时,您将调用“ cb”:

event.on("done", cb);

cb
返回时,“异步N”循环执行。

如何使用事件发射器编写异步函数?

使用

setImmediate
process.nextTick

如果你想推迟“我做我的工作”循环执行,你可以换行

events.emit ("work")
nextTick

var events = require("events");var event = new events.EventEmitter();event.on("work", function () {    for (var i = 0; i <= 10; i++) {        console.log("I do my work " + i);    }    event.emit("done");});var async = function (cb) {    event.on("done", cb);    process.nextTick (function () {         //<-----        event.emit("work");    });    //<-----    for (var i = 0; i <= 10; i++) {        console.log("Async " + i);    }}async(function () {    console.log("I am done callback!");});

这将打印:

Async 0Async 1Async 2Async 3Async 4Async 5Async 6Async 7Async 8Async 9Async 10I do my work 0I do my work 1I do my work 2I do my work 3I do my work 4I do my work 5I do my work 6I do my work 7I do my work 8I do my work 9I do my work 10I am done callback!


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

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

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