gpt4 book ai didi

javascript - 将对象传递给回调的正确方法?

转载 作者:行者123 更新时间:2023-12-03 03:53:56 24 4
gpt4 key购买 nike

在这个例子中,使用express,我想传递'res',这样我就可以在功能完成时定向页面:

function dostuff(id) {
console.log(id);
};

app.post('/:id', function(req, res){
dostuff(req.params.id, function() {
res.redirect('/');
});
});

但“res”未知。所以我尝试将它传递到函数参数中:

dostuff(req.params.id, function(res) {

但这不起作用。应该如何正确地做到这一点?

编辑

所以我似乎失去了将代码简化为示例的上下文。这是我的原始代码 - 请注意正在传递的“res”,但生成的错误是 res.redirect 不是函数:

app.delete('/todo/:id', function(req, res){
var id = [req.params.id];
couch.view('items', 'all_items', {keys: id}, function(err, body, res) {
if (!err) {
var row = body.rows[0];
var id = row.id;
var rev = row.value.rev;
couch.destroy(id, rev);
res.redirect('/todo');
};
});
});

最佳答案

当您将回调定义为function(err, body, res)时,您期望couch.view将res作为最后一个参数传递,但事实并非如此通过它。

在您的情况下,您应该从参数列表中删除 res ,这样您就不会隐藏闭包中可用的 res

app.delete('/todo/:id', function(req, res){
var id = [req.params.id];
couch.view('items', 'all_items', {keys: id}, function(err, body) {
// Don't define a res argument to this callback, use it from the closure
...
res.redirect('/todo');
});
});

回答原来的问题

您的 doStuff 需要接受回调,在您的情况下,您不需要传递它,因为它可以通过闭包获得。

function dostuff(id, cb) {
console.log(id);
// Faking doing something async
setTimeout(cb, 1000);
};

app.post('/:id', function(req, res){
dostuff(req.params.id, function() {
// res is available from the closure
res.redirect('/');
});
});

这是另一种解决方案,以防您的回调未内联定义。

function dostuff(id, cb) {
console.log(id);
// Faking doing something async
setTimeout(function, 1000);
};

function afterFinished(res) {
res.redirect('/');
}
app.post('/:id', function(req, res){
dostuff(req.params.id, afterFinished.bind(null, res));
});

关于javascript - 将对象传递给回调的正确方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45038764/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com