async.waterfall 不同步
async.waterfall not acting synchronously
我正在尝试使用加密写一个 header 的 MD5 哈希令牌,然后 return 它作为响应返回。出于某种原因,它实际上并不是 运行 同步的。我知道 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 立即被 returned 因为隐含的 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();
});
我正在尝试使用加密写一个 header 的 MD5 哈希令牌,然后 return 它作为响应返回。出于某种原因,它实际上并不是 运行 同步的。我知道 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 立即被 returned 因为隐含的 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();
});