async.waterfall 不同步运行

我正在尝试使用加密写入 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


至尊宝的传说
浏览 123回答 1
1回答

慕哥6287543

是的,JavaScript 是一种异步语言,但它也可以很好地完成同步任务。就您而言,如果您正在处理承诺,则不需要执行任何异步预期。如果您像下面的示例一样编写代码,它将只会从上到下执行。但是发生错误(可能)是因为您忘记在回调中添加左花括号app.post,这导致datavar 由于隐含的 return 语句() => (隐式)、() => {}(显式)而立即返回。const crypto = require('crypto');const bodyParser = require('body-parser');const formidable = require('formidable');app.post('/pushurl/auth', (req, res) => {&nbsp; const data = req.body.form1data1 + '§' + req.body.form1data2;&nbsp; const token = crypto.createHash('md5').update(data).digest("hex");&nbsp; res.writeHead(301, {&nbsp; &nbsp; Location: '/dashboard?token=' + token&nbsp; });&nbsp; res.end();&nbsp; &nbsp; &nbsp; &nbsp;&nbsp;});
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

JavaScript