我试图在回调函数中从 redis 返回一个列表,但我做的事情不对,这是以下函数:
public get = () =>
CoreHelpers.controller("get.alerts", async() => {
let returnVal: [] = []
rangeReturn(function(obj:any){
returnVal = obj.map((x:any) => JSON.parse(x))
console.log(returnVal) <--- works here
}, returnVal)
//Returns the list of the given ticker
function rangeReturn(callback: any, returnVal: any) {
RedisClients.client0.lrange("alerts", 0, -1, (err, reply) => {
if (!err) {
callback(reply, returnVal);
} else {
console.log("Error within client.lrange in Quandl.js");
}
});
}
console.log(returnVal) <--- doesnt work here
return returnVal
});
似乎即使我在函数调用之外声明了 returnVal 并传入了它没有返回的数据。我假设是因为 rangeReturn 在解析数据之前没有完成?但是我该如何正确格式化它呢?谢谢!
答案 0 :(得分:0)
这是您将 Promise 构造函数与 resolve
/reject
回调一起使用的地方:
CoreHelpers.controller("get.alerts", async () => {
const promise = new Promise((resolve, reject) => {
RedisClients.client0.lrange("alerts", 0, -1, (err, reply) => {
if (!err) {
resolve(reply);
} else {
reject(err);
}
});
});
return promise.then(value => {
// If you want to modify the value first
return value.map((x: any) => JSON.parse(x));
});
});