js 的一个问题, 大家帮忙看看, 如何把值取出来用.

2018-04-28 09:19:44 +08:00
 wzw

demo 代码是:

db.set('a', new Date(), function(){
	console.log('set a');
});
db.get('a', function(err, val){
	console.log('get a = ' + val);
	ssdb.close();
});

我的需求是, get 得到的 val 希望可以 继续使用.

db.set('a', new Date(), function(){
	console.log('set a');
});
db.get('a', function(err, val){
	console.log('get a = ' + val);
	ssdb.close();
});

console.log(val);

有什么办法? 谢谢

1765 次点击
所在节点    问与答
14 条回复
per
2018-04-28 09:22:34 +08:00
在外部定义一个变量然后在 get 的回调函数里赋值不可以吗?
chairuosen
2018-04-28 09:25:34 +08:00
最后一行 console.log 会最先运行
binux
2018-04-28 09:26:51 +08:00
let val;
db.get('a', function(err, v){
console.log('get a = ' + val);
val = v;
ssdb.close();
});
0312birdzhang
2018-04-28 09:28:51 +08:00
db.xx 是异步的,所以你拿不到,用回调吧
wzw
2018-04-28 09:47:22 +08:00
@per #1 我现在去看看如何 js 回调

@chairuosen #2 是的,因为是异步

@binux #3 这样不可以的

@0312birdzhang #4 写个 demo 给我, 要不然我还得自己研究一会
losingyoung
2018-04-28 09:49:27 +08:00
恐怕只能在回调里面写,就算在外面定义变量,赋值还是回调里赋值 外面直接用还是 undefined,优雅一点可以加一层 promise
function getter(a) {
return new Promise((resolve, reject) => {
db.get(a, (err, val) => {
if (err) {
reject(err)
return
}
let value = val
console.log('get a = ' + val);
ssdb.close();
resolve(value)
});
})
}

getter('a').then(val => {console.log(val)})
或者如果可以用 async
let val = await getter('a')
console.log(val)
wzw
2018-04-28 09:52:14 +08:00
@losingyoung 一万个感谢了...
0312birdzhang
2018-04-28 09:52:37 +08:00
@wzw #5 看 #6,还要给你写 demo ?不存在的
horizon
2018-04-28 09:55:09 +08:00
异步的,用全局变量保存也没用。楼上的 Promise 靠谱点。要么用 await
wzw
2018-04-28 09:58:46 +08:00
@0312birdzhang #8 6 楼给了, 瞬间明白了,,,
wzw
2018-04-28 09:59:10 +08:00
@horizon #9 六楼大哥 给了完美答案
binux
2018-04-28 10:11:38 +08:00
@wzw #5 你只说要取出来,并没有说要立即使用啊
jin5354
2018-04-28 10:28:30 +08:00
promise 简单实用
per
2018-04-28 12:14:50 +08:00
6 楼的是对的

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/450578

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX