Node js,函数不等待响应

Nishant Sharma

我是Node js的新手。从逻辑上讲,await应该等待函数完成,然后下一行代码应该运行,但是在我的函数中,即使使用await之后,它也不等待进程(2)完成。我想念什么?

const getDefaultTemplates = async (token) => {
  const emailertoken = process.env.EMAILER_AUTH_TOKEN;
  const key = 'defaultTemplates';
  // This should run first
  console.log('hi');
  let defaultTemplatesVar = '';
  let fromCache = 0;

  // This should run second. Need response from redisClient to return parent function
  const defaultTemplates = await redisClient.get(key, (err, data) => {
    if (err) {
      console.log(err);
    }
    // If data is found in cache
    if (data != null) {
      console.log('from cache');
      defaultTemplatesVar = JSON.parse(data);
      fromCache = 1;
      console.log('defaultTemplatesVar1 = ', defaultTemplatesVar);
    }
    return defaultTemplatesVar;
  });

  console.log('defaultTemplatesVar2 = ', defaultTemplatesVar);
  console.log('fromCache = ', fromCache);
  if (fromCache === 0) {
    // If data is not found in cache, call api
    // console.log('from api');
    try {
      const response = await axios.get(`${process.env.EMAILER_API_URL}/get-system-templates`, {
        headers: {
          Authorization: `bearer ${emailertoken}`,
        },
      });
      console.log('from data');
      redisClient.setex(key, 3600, JSON.stringify(response.data._embedded.get_system_templates));
      defaultTemplatesVar = response.data._embedded.get_system_templates;
      console.log('defaultTemplatesVar3 = ', defaultTemplatesVar);
    } catch (error) {
      console.error(error);
    }
  }

  // This should run at last, to return value to parent function getDefaultTemplates()
  console.log('bye');
  console.log('defaultTemplatesVar4 = ', defaultTemplatesVar);
  return defaultTemplates;
};


输出->

hi
defaultTemplatesVar2 =  
fromCache =  0
from cache
defaultTemplatesVar1 =  [ { name: 'versafix-1', description: 'The versatile template' },
  { name: 'givecentral', description: 'The Givecentral Template' } ]
from data
defaultTemplatesVar3 =  [ { name: 'versafix-1', description: 'The versatile template' },
  { name: 'givecentral', description: 'The Givecentral Template' } ]
bye
defaultTemplatesVar4 =  [ { name: 'versafix-1', description: 'The versatile template' },
  { name: 'givecentral', description: 'The Givecentral Template' } ]

输出应为1,2,3,4的串联。

黄艾伦

不能使用回调函数await,要将回调fn转换为Promise fn,请查看https://www.npmjs.com/package/redis#promises

如果您使用的是其他软件包,则实际上可以通过

const redisGet = (key) => new Promise((resolve, reject) => {
  redisClient.get(key, (err, data) => {
    if (err) return reject(err);
    return resolve(data);
  });
});

// So you can do
const data = await redisGet(key);
// or
redisGet(key).then((data) => { ... }).catch((err) => { ... });

所以你应该怎么做

try {
  ...

  const data = await redisClient.get(key);

  if (data != null) {
    console.log('from cache');
    defaultTemplatesVar = JSON.parse(data);
    fromCache = 1;
    console.log('defaultTemplatesVar1 = ', defaultTemplatesVar);
  }
  const defaultTemplates = defaultTemplatesVar;
  ...
} catch (err) {
  console.error(err);
}

关于回调与承诺的简单教程

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

Javascript函数不等待AJAX响应

来自分类Dev

JavaScript,node.js在继续之前等待socket.on响应

来自分类Dev

node.js q不等待延迟的诺言得到解决

来自分类Dev

承诺中的 Node.js 承诺不等待循环返回数据

来自分类Dev

等待回调函数在Node.js中返回

来自分类Dev

Node.js MongoDb find 函数忽略等待

来自分类Dev

Node.js(node-pg)或C(libpq)-执行PostgreSQL请求而无需等待响应?

来自分类Dev

JS(node.js)-如果我进行异步调用但不等待其完成,是否可以保证完成执行?

来自分类Dev

JS(node.js)-如果我进行异步调用但不等待其完成,是否可以保证完成执行?

来自分类Dev

Node Js链接响应

来自分类Dev

尝试使用 node.js 中的 readline 从控制台读取输入,但应用程序不等待输入

来自分类Dev

自定义函数成功响应/ node.js

来自分类Dev

Node JS Azure函数在发布方法后获取响应数据

来自分类Dev

Node.js如何等待子进程退出或允许其响应

来自分类Dev

$ .when()不等待ajax响应

来自分类Dev

Node js,函数执行

来自分类Dev

如何修改Node JS响应

来自分类Dev

Node js swagger 响应说明

来自分类Dev

使用process.nextTick或setImmediate创建等待函数-node.js

来自分类常见问题

异步中代码执行的顺序等待在Node.js中的函数中无法正常工作?

来自分类Dev

如何在Node.js中继续之前等待函数完成

来自分类Dev

Node.js-不确定如何在函数中等待数据库查询

来自分类Dev

如何使用 node js util.promisify 和 writeFile fs 函数并等待

来自分类Dev

等待用户在node.js中输入

来自分类Dev

等待请求完成Node.js

来自分类Dev

异步和等待功能Node.js

来自分类Dev

等待操作在node.js中完成

来自分类Dev

node.js等待文件操作完成

来自分类Dev

Node.js / Redis-等待连接?

Related 相关文章

  1. 1

    Javascript函数不等待AJAX响应

  2. 2

    JavaScript,node.js在继续之前等待socket.on响应

  3. 3

    node.js q不等待延迟的诺言得到解决

  4. 4

    承诺中的 Node.js 承诺不等待循环返回数据

  5. 5

    等待回调函数在Node.js中返回

  6. 6

    Node.js MongoDb find 函数忽略等待

  7. 7

    Node.js(node-pg)或C(libpq)-执行PostgreSQL请求而无需等待响应?

  8. 8

    JS(node.js)-如果我进行异步调用但不等待其完成,是否可以保证完成执行?

  9. 9

    JS(node.js)-如果我进行异步调用但不等待其完成,是否可以保证完成执行?

  10. 10

    Node Js链接响应

  11. 11

    尝试使用 node.js 中的 readline 从控制台读取输入,但应用程序不等待输入

  12. 12

    自定义函数成功响应/ node.js

  13. 13

    Node JS Azure函数在发布方法后获取响应数据

  14. 14

    Node.js如何等待子进程退出或允许其响应

  15. 15

    $ .when()不等待ajax响应

  16. 16

    Node js,函数执行

  17. 17

    如何修改Node JS响应

  18. 18

    Node js swagger 响应说明

  19. 19

    使用process.nextTick或setImmediate创建等待函数-node.js

  20. 20

    异步中代码执行的顺序等待在Node.js中的函数中无法正常工作?

  21. 21

    如何在Node.js中继续之前等待函数完成

  22. 22

    Node.js-不确定如何在函数中等待数据库查询

  23. 23

    如何使用 node js util.promisify 和 writeFile fs 函数并等待

  24. 24

    等待用户在node.js中输入

  25. 25

    等待请求完成Node.js

  26. 26

    异步和等待功能Node.js

  27. 27

    等待操作在node.js中完成

  28. 28

    node.js等待文件操作完成

  29. 29

    Node.js / Redis-等待连接?

热门标签

归档