Nodejs 回调问题

发布于 1周前 作者 sinazl 来自 nodejs/Nestjs

Nodejs 回调问题
为何下面的

<br>module.exports.fans = function(callback) { <br> var selectSQL = "SELECT * FROM `fans` WHERE `statu`= 0"; <br> connection.query(selectSQL,function(err, rows) { <br> if (err) throw err; <br> var op = {}; <br> var cookie =''; <br> for(var id in rows){ <br> /*superagent.get('http://gxwx.xmtsw.com/wechat/page/index/title/?openid='+rows[id].openid) <br> .end(function(err,res){ <br> cookie = res.header['set-cookie'].join(',').match(/(PHPSESSID=.+?);/)[1]; <br> //op[rows[id].wxid]=rows[id].openid; <br> });*/ <br> op[rows[id].wxid]=rows[id].openid; <br> //callback(op); <br> } <br> callback(op); <br> }); <br> connection.end(); <br> }


superagent 外面的 callback 里能正常返回
{ xudada0509: 'oVFWVjm***VDtygxoUta0', <br> xuchangyu77: 'oVFWVjrgX***3PKET83almQoz2gw', <br> linchunhua77: 'oVFWVjhLYe***K0UA1PGmp4N0flI', <br> linchunhua55: 'oVFWVjjGopj***UStfHc2JqyDwCA', <br> pangwanglin: 'oVFWVjkCg***_wxQ2bmhu2UkIxro' }

放 superagent 里面就是没都没有?

求解


3 回复

为什么在 superagent 回调函数里面 组装{}外面访问不行 如何解决?


在Node.js中,回调问题通常涉及到异步编程模型,这是Node.js的核心特性之一。Node.js使用事件驱动、非阻塞I/O模型,使得它在处理高并发请求时非常高效。然而,这也带来了回调地狱(Callback Hell)的问题,即嵌套回调导致代码难以阅读和维护。

以下是一个简单的示例,展示了Node.js中的回调使用:

const fs = require('fs');

// 读取文件的回调示例
fs.readFile('example.txt', 'utf8', (err, data) => {
  if (err) {
    console.error('读取文件出错:', err);
    return;
  }
  console.log('文件内容:', data);
});

为了解决回调地狱问题,Node.js社区引入了多种解决方案,如Promise和async/await。

使用Promise可以简化异步代码结构:

const fs = require('fs').promises;

fs.readFile('example.txt', 'utf8')
  .then(data => {
    console.log('文件内容:', data);
  })
  .catch(err => {
    console.error('读取文件出错:', err);
  });

而async/await则进一步简化了异步代码的写法,使其看起来更像是同步代码:

const fs = require('fs').promises;

async function readFile() {
  try {
    const data = await fs.readFile('example.txt', 'utf8');
    console.log('文件内容:', data);
  } catch (err) {
    console.error('读取文件出错:', err);
  }
}

readFile();

通过使用Promise和async/await,我们可以更优雅地处理Node.js中的回调问题。

回到顶部