我正在使用knex,一个返回PostgreSQL承诺的库。我希望像pg库一样使用它。我的问题是我没有看到一种方法从类似于pg的方法返回一个promise,如下所示
var newObj = {
getAllRows: function(callback) {
return pg.query("select * from table",callback);
},
};
在调用newObj.getAllRows
时返回包含所有数据的所有行。
我为knex试过了同样的东西,但它没有返回......
var knexObj = {
getAllRows: function(callback) {
return knex('table').select("*")
.then((data) {
return data;
}
},
答案 0 :(得分:0)
这是一个有效的例子。您返回promise
。 MDN在Using promises中解释得最好。
var getJSON = function(url) {
return new Promise(function(resolve, reject) {
var xhr = new XMLHttpRequest();
xhr.open('get', url, true);
xhr.onload = function() {
var status = xhr.status;
if (status == 200) {
resolve(JSON.parse(xhr.response));
}
else {
reject(status);
}
};
xhr.send();
});
};
答案 1 :(得分:0)
这里有不同的选择。考虑承诺文件的考生:https://developer.mozilla.org/de/docs/Web/JavaScript/Reference/Global_Objects/Promise
我建议将回调附加到返回的promise的then队列中,如下所示:
var knexObj = {
getAllRows: function() {
return Promise.resolve('MY DATA!')// stub for: knex('table').select("*") ....
},
}
knexObj.getAllRows().then((data)=>{ // your callback!
console.log("got the data:", data);
})

这样做的好处是,您可以将then语句链接在一起,并且不必反复传递回调。
此外,您可以捕获其中一个链部件中引发的所有错误,并尝试通过返回另一个承诺来解决它们。
var knexObj = {
getAllRows: function() {
return Promise.reject('ERROR')// stub for: knex('table').select("*") ....
},
}
knexObj.getAllRows()
.catch(()=>{
console.log("something went wrong but I can resolve this!");
return Promise.resolve('Default Data!')
})
.then((data)=>{ // your callback!
console.log('part result:', data);
return Promise.resolve(data.split(' '))
})
.then((splitData)=>{
for(let data of splitData){
console.log('final data part:', data);
}
})
.catch(()=>{
console.log("something went wrong and there is nothing I can do about it!");
})

答案 2 :(得分:0)
/**
* Returns the recommended memory cache size for the device it is run on in bytes.
*/
public int getMemoryCacheSize() {
return memoryCacheSize;
}
/**
* Returns the recommended bitmap pool size for the device it is run on in bytes.
*/
public int getBitmapPoolSize() {
return bitmapPoolSize;
}