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

 望奇迹般地神话 发布于 2023-01-19 10:10

我不确定node.js是如何能够实现异步的哪些功能,哪些不是以及如何创建自定义异步功能.

说我想创建一个自定义异步函数.如果仅仅因为我调用异步函数回调或cb的最后一个参数它会知道它的异步函数,我会感到惊讶:

function f(arg1, callback){
  //do stuff with arg1
  arg1.doStuff()
  //call callback
  callback(null, arg1.result());
}

我尝试了类似的东西,它没有异步工作.你怎么告诉node.js f实际上是异步的?

1 个回答
  • 要创建异步函数,您必须在其上有一些异步原语(通常与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();
    

    async function函数可以在函数之前或之后doSomethingElse运行,具体取决于结果是否被缓存.现在,如果在doSomethingWithResult函数上使用异步原语,例如makeRequest:

    var cache = null;
    function makeRequest(callback) {
      if(!cache) {
        makeAjax(result => {
          cache = result;
          callback(result);
        });
      } else {
        process.nextTick(() => callback(cache));
      }
    }
    

    该呼叫始终是异步的,并且process.nextTick始终在之前运行doSomethingElse.

    2023-01-19 10:12 回答
撰写答案
今天,你开发时遇到什么问题呢?
立即提问
热门标签
PHP1.CN | 中国最专业的PHP中文社区 | PNG素材下载 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有