因此,我知道这是一个已涉及的主题,但是我还没有找到一个示例来演示整个实现。
我只是在尝试进行SQLite db.get调用,并返回一个以后可以使用的对象。
我知道回调在这里很关键,可能是因为我对Javascript / async的理解不够好,但是我需要知道如何从回调中访问返回的对象,但是事实证明这对为了我。 (我对JS非常陌生,主要是Java背景)
以下面的代码为例:
function foo(){
db.get("SELECT open_hour, open_minut FROM autorun_open", function(err, row) {
console.log(row.open_hour);
console.log(row.open_minut);
row = row.open_hour;
callback(row);
});
}
function callback(row) {
console.log("R:" + row);
}
如何调用此函数,以便可以从该函数取回row
对象?
作为一种伪代码示例,我已经尝试过类似的事情:
let row = foo();
console.log("My row: " + row);
问题是,当然执行是异步的,并且行始终是未定义的。
实际上如何从此回调中获取行对象?
谢谢大家,对于这个问题与其他问题相似,我深表歉意,但是我一直在寻找其他可能发表的帖子,并且根本找不到一个足以让我理解的示例。
答案 0 :(得分:0)
根据您的评论,您想在row
之外获得function foo()
。
您必须使用return
关键字从函数返回数据,这就是我们在C#或Java中所做的事情
function foo(){
let row='This is my row data'
return callback(row);
}
function callback(row) {
console.log("R:" + row);
return row
}
let row= foo()
console.log("My row: " + row)
我将示例简化了一点,但是基本概念是您必须使用return
更新
即使您执行async/await
,也无法从函数外部获取数据,因为JavaScript是单线程的,并且它不等待函数执行。所有异步内容都由Event Loop处理。
这就像说我想今天读明天的报纸,这是不可能的。 (PS-我在SO上的某处阅读了此行,但找不到源)
长话短说,由于async/await
返回数据时,您无法获得外部query
调用返回的数据。您的脚本将完成运行并已打印undefined
这不是最好的例子,但我希望它会有所帮助
function async foo(){
let row='This is my row data'
await callback(row);
}
function async callback(row) {
console.log("R:" + row);
await row
}
let row= foo()
console.log("My row: " + row) //<--- Still undefined because foo() is still working in background and this prints default value of undefined