为了账号安全,请及时绑定邮箱和手机立即绑定

async.waterfall 不同步运行

async.waterfall 不同步运行

至尊宝的传说 2023-06-29 20:55:30
我正在尝试使用加密写入 MD5 哈希令牌的标头,然后将其作为响应返回。由于某种原因,它实际上并未同步运行。我知道 JS 是一种异步语言,这确实是我现在唯一遇到困难的部分。任何帮助,将不胜感激。这是我到目前为止所拥有的:const crypto = require('crypto');const bodyParser = require('body-parser');const formidable = require('formidable');const async = require('async')app.post('/pushurl/auth', (req, res) =>    var data = req.body.form1data1 + '§' + req.body.form1data2             async.waterfall([            function(callback) {                var token = crypto.createHash('md5').update(data).digest("hex");                callback(null, token);            },            function(token, callback) {                res.writeHead(301,                    {Location: '/dashboard?token=' + token}                );                callback(null)            },            function(callback) {                res.end();                callback(null)            }        ]);            }});输出:Uncaught Error [ERR_HTTP_HEADERS_SENT]: Cannot set headers after they are sent to the client<node_internals>/internal/errors.js:256    No debugger available, can not send 'variables'Process exited with code 1
查看完整描述

1 回答

?
慕哥6287543

TA贡献1831条经验 获得超10个赞

是的,JavaScript 是一种异步语言,但它也可以很好地完成同步任务。就您而言,如果您正在处理承诺,则不需要执行任何异步预期。


如果您像下面的示例一样编写代码,它将只会从上到下执行。


但是发生错误(可能)是因为您忘记在回调中添加左花括号app.post,这导致datavar 由于隐含的 return 语句() => (隐式)、() => {}(显式)而立即返回。


const crypto = require('crypto');

const bodyParser = require('body-parser');

const formidable = require('formidable');


app.post('/pushurl/auth', (req, res) => {


  const data = req.body.form1data1 + '§' + req.body.form1data2;

  const token = crypto.createHash('md5').update(data).digest("hex");

  res.writeHead(301, {

    Location: '/dashboard?token=' + token

  });

  res.end();

        

});


查看完整回答
反对 回复 2023-06-29
  • 1 回答
  • 0 关注
  • 122 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信