如何在node.js中创建自定义异步函数?

我不确定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

以上是 如何在node.js中创建自定义异步函数? 的全部内容, 来源链接: utcz.com/qa/402968.html

回到顶部