gpt4 book ai didi

javascript - SailsJs 将函数调用到同一个 Controller 中

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

我想在同一个 Controller 中调用一个函数,但我大多遇到如下错误:“ReferenceError:myFunctionB 未定义”

module.exports = {

myfunctionA: function(req, res){

var theword;
theword = myFunctionB({id:26})

return res.json({say:theword})

},

myfunctionB: function(req, res){

var id = req.param('id');

niceword.get({
id:id
}, function(err, word){

if(err){return res.negotiate(err);}
if(!word){return res.json({err:"no word found"})}

return res.json({word:word});

})

}

}

我也尝试将 myFunctionB 放入服务中,但是,由于我使用许多其他 Controller 等,我没有响应..有什么想法吗?

最佳答案

有几种方法可以做到这一点。正如 yBrodsky 所说,正确的方法是创建一个运行回调或返回 promise 的服务:

myServiceFunctionB: function(params, cb) {
var id = params.id;
niceword.get({
id:id
}, function(err, word){
return cb({ say: { word: word });
});
}

然后在你的 Controller 中,只需使用:

return MyServiceName.myServiceFunctionB({id: 26}, res.json);

您还可以传入您的 req 和 res 来继续使用它们:

myServiceFunctionB: function(req, res) { ...

或者,您可以在 Controller 中使用 this 关键字:

myfunctionA: function(req, res){
req.params.id = 26;
return this.myfunctionB(req, res);
}

如果您要执行更复杂的逻辑,而上下文会丢失,只需在开始时使用以下命令设置一个新的变量:

myfunctionA: function(req, res){
var self = this;
req.params.id = 26;
//...lots of nested promises or callbacks...
return self.myfunctionB(req, res);
}

关于javascript - SailsJs 将函数调用到同一个 Controller 中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43523921/

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