gpt4 book ai didi

node.js - 类型错误 : Cannot call method 'then' of undefined

转载 作者:搜寻专家 更新时间:2023-11-01 00:42:38 27 4
gpt4 key购买 nike

我在 Sailsjs 的 Controller 中执行了以下代码。底层适配器是 sails-orientdb。我收到以下错误信息

TypeError: 无法调用未定义的方法 'then'

为什么会出现这个错误?

        User.query("select id from User where username='" + req.param("userid") + "'").then(function(userData){
console.log(userData);
return userData;
}).fail(function (err) {
console.log("Handled");
});

最佳答案

扩展@jaumard 所说的内容。

背景

通常建议使用standard waterline query methods比如find(), update(), create(), destroy()等这些方法支持回调和 promise ,这些方法对任何水线适配器(OrientDB、MySQL、MongoDB 等)的工作方式相同。

有时你可能想做一些更复杂的事情,标准水线方法不支持,为此 sails-orientdb 使用 query() 扩展水线定义,在 other methods 中。 .

sails-orientdb .query()

sails-orientdb 查询使用回调,因此您可以像这样使用它:

  // Assume a model named "Friend"
Friend.query("SELECT FROM friendTable WHERE name='friend query'", function(err, retrievedUsers){
console.log(retrievedUsers);
});

更新:自 v0.10.53 起还支持以下内容:

Friend.query("SELECT FROM friendTable WHERE name='friend query'")
.then(function(retrievedUsers){
console.log(retrievedUsers);
});

如果你真的想使用 promise 机制,你有两个选择:

promise query()

通过使用 bluebird promise 的 promise 。示例:

var queryPromise = Promise.promisify(User.query);
queryPromise('select...').then(function(){/*...*/})

使用getDB()

另一种选择是使用 sails-orientdb 自定义方法 getDB .此方法返回 Oriento db 实例,可用于 promise 查询。示例:

User.getDB().query('select from OUser where name=:name', {
params: {
name: 'Radu'
},
limit: 1
}).then(function (results){
console.log(results);
});

关于node.js - 类型错误 : Cannot call method 'then' of undefined,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29323819/

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