我是NodeJS的新手,我正在学习如何使用流。 读一本书我找到了这个示例代码:
var CountStream = require('./countstream');
var countStream = new CountStream('book');
var http = require('http');
http.get('http://www.manning.com', function(res) {
res.pipe(countStream);
});
countStream.on('total', function(count) {
console.log();
});
在此代码段中,我们调用http.get
方法,然后等待回调(第1部分)。
在下一行,我们正在收听total
事件(第2部分)。
问题:如果在第1部分和第2部分之间发生延迟怎么办,那么第1部分的回调首先执行(在第2部分开始收听total
事件之前。第一个数据块是否会丢失?
答案 0 :(得分:2)
不,因为您已经没有"等待" 进行回调。回调是异步,并将在using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Mvc;
using System.ComponentModel.DataAnnotations;
namespace workflow.DataHolders
{
public class Project : DataHolder
{
[Required(ErrorMessage = "This Field Is Required")]
[StringLength(200, MinimumLength = 3, ErrorMessage = "Length Of The Title Should Be More Than 3 Letters")]
public string ProjectName{ get; set; }
[Required(ErrorMessage = "This Field Is Required")]
public List<SelectListItem> ProjectOwner { get; set; }
string Description { get; set; }
[Required(ErrorMessage = "This Field Is Required")]
public List<SelectListItem> Department { get; set; }
[Required(ErrorMessage = "This Field Is Required")]
public List<SelectListItem> Region { get; set; }
}
}
函数返回后执行。第2部分将在调用回调函数(第1部分)之前执行。
构造异步事件发射器并仅在构造之后注册事件处理程序是完全安全的(只要它同步发生),因为事件只会在事件循环的下一轮发出。