微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

异步瀑布不同步动作

如何解决异步瀑布不同步动作

我正在尝试使用crypto编写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

解决方法

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

如果您像下面的示例中那样编写代码,它将仅从上至下执行。

但是错误(可能)发生的原因是您忘记在app.post回调中添加了一个花括号,这导致data var由于隐含的return语句{{1 }}(暗示),() => (明确)。

() => {}

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。