我不确定node.js如何在异步中实现哪些功能,在异步中没有实现的功能以及如何创建自定义异步功能。
说我想创建一个自定义的异步函数。如果只是因为我对异步函数回调或cb调用了我的最后一个参数而只知道其异步函数,我会感到惊讶:
function f(arg1, callback){
//do stuff with arg1
arg1.doStuff()
//call callback
callback(null, arg1.result());
}
我尝试了类似的方法,但它无法异步运行。您如何告诉node.js f实际上是异步的?
注意 :此答案写于2014年,在出现之前async function
,在Promises流行之前。尽管同样的原则同样适用,但我建议您先阅读Promises,然后再尝试了解它们与“传统”回调驱动的异步函数的关系。
要创建一个异步调用其回调的函数,您必须在其上使用一些平台提供的异步原语(通常与IO相关)-计时器,从文件系统读取,发出请求等。
例如,此函数采用一个回调参数,并在100ms之后调用它:
function asyncFn(callback) {
setTimeout(() => {
callback();
}, 100);
}
使API不需要时使函数异步的可能原因是。例如,假设您有一个发出网络请求并缓存结果供以后调用的函数:
var cache = null;
function makeRequest(callback) {
if (!cache) {
makeAjax(result => {
cache = result;
callback(result);
});
} else {
callback(cache);
}
}
问题是,此功能不一致:有时它是异步的,有时不是。假设您有一个这样的消费者:
makeRequest(result => doSomethingWithResult(result));
doSomethingElse();
该doSomethingElse
函数可以在该函数之前或之后doSomethingWithResult
运行,具体取决于结果是否已缓存。现在,如果您在makeRequest
函数上使用异步原语,例如process.nextTick
:
var cache = null;
function makeRequest(callback) {
if(!cache) {
makeAjax(result => {
cache = result;
callback(result);
});
} else {
process.nextTick(() => callback(cache));
}
}
该调用始终是异步的,并且doSomethingElse
始终在之前运行doSomethingWithResult
。
问题内容: 查看此代码: 正如您在控制台中看到的那样,“动画”功能是异步的,它“分叉”了事件处理程序块代码的流程。事实上 : 遵循块代码的流程! 如果我希望以此行为创建自己的代码,该如何使用javascript/jquery进行创建?我认为这是不使用的策略 问题答案: 您不能创建真正的自定义异步函数。您最终将不得不利用本机提供的技术,例如: 一些HTML5 API,例如文件API,Web数据库AP
问题内容: 如何在Java中创建自定义异常? 问题答案: 要定义受检查的异常,请创建的子类(或子类的层次结构)。例如: 可能引发或传播此异常的方法必须声明它: …,并且调用此方法的代码必须处理或传播此异常(或同时处理): 你会在上面的示例中注意到该错误IOException已被捕获并重新抛出为。这是用于封装异常的常用技术(通常在实现API时)。 有时在某些情况下,你不想强制每个方法在其throws
我想创建帮助函数以避免在Laravel中的视图之间重复代码。例如: 看法刀身php 它们基本上是文本格式函数。我应该如何定义全局可用的助手函数,如fooFormatText()?
问题内容: 我正在使用Axis2 1.5.2和Eclipse。我正在使用Eclipse从生成的WSDL生成WSDL和客户端代码。 我创建了一个服务可以抛出的自定义异常。创建Web服务时一切正常。Web服务成功启动,并且可以通过指向Web浏览器来查看生成的WSDL。但是,当我告诉Eclipse使用生成的WSDL生成客户端代码时,我从Eclipse中得到了以下错误: 我的自定义异常是“ InsertU
在一次采访中,我最近被问到以下问题: 有没有其他方法可以创建自定义的,而不使用: 扩展异常类或的子类,用于检查异常 为未检查的异常扩展或的子类。 可能的答案是什么?
我创建了一个小的测试项目来测试我的实现,下面是我的异常类头文件。 异常类的源文件为 在我的主应用程序中,我调用了一个函数,该函数抛出我的异常,并在try/catch中捕获它,如下所示: 现在要跑了。哦,天哪,我需要抛出一个异常 捕获的异常:这是我的异常错误。:( 相反,我得到的是 从我在各种帖子上看到的情况来看,我所做的是正确的,所以我错过了什么。