js问题 看看为啥总是弹出 undefined 我只是想吧所有数组浏览一遍
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了js问题 看看为啥总是弹出 undefined 我只是想吧所有数组浏览一遍相关的知识,希望对你有一定的参考价值。
看看为什么总是弹出 undefined 我只是想吧所有数组浏览一遍
var str=[["f","df","32",1.2,98],"122",12,"li",45,8.9];
for(var a=0;a<str.length;a++)
if(str[a].length)
for(var i=0;i<str[a].length;i++)
alert(str[a][i]);
else
alert(str[a]);
<script type="text/javascript">
var str=[["f","df","32",1.2,98],"122",12,"li",45,8.9];
for(var a=0;a<str.length;a++)
if(typeof str[a] == 'object') // 字符串也是有 length 属性的,所以改用 typeof 来测试当前数组元素是否是一个数组,如果是就执行另一个for循环
for(var i=0;i<str[a].length;i++)
alert(str[a][i]);
else
alert(str[a]);
</script> 参考技术A if(str[a].length)
for(var i=0;i<str[a].length;i++)
alert(str[a][i]);
改为:
if(str[a].length > 0)
for(var i=0;i<str[a].length;i++)
alert(str[a][i]);
为啥函数返回的值总是 null 或 undefined?
【中文标题】为啥函数返回的值总是 null 或 undefined?【英文标题】:Why is the value that is always returned from the functio null or undefined?为什么函数返回的值总是 null 或 undefined? 【发布时间】:2018-02-04 03:45:08 【问题描述】:每当我运行以下代码时,从 checkIfUserHasMadeBet() 函数返回的值总是为空。似乎代码不是在等待函数返回一个值,而是向前跳过。如何让它等待函数从 firebase 数据库返回数据?
export class DisplayBetPage
hasCurrentUserMadeAbet: boolean = false;
constructor(private navParams: NavParams, public navCtrl: NavController, private afAuth: AngularFireAuth, private afDatabase: AngularFireDatabase, public alertCtrl: AlertController)
ionViewWillLoad()
var temp = this.checkIfUserHasMadeBet();
console.log(temp); // comes out as null
if (temp != null)
this.hasCurrentUserMadeAbet = true;
checkIfUserHasMadeBet()
this.afAuth.authState.take(1).subscribe(auth =>
this.afDatabase.database
.ref(`userprofile/$auth.uid/bets/$this.bettingKey`)
.once(`value`).then(function(snapshot)
console.log(snapshot.val());
// comes out with correct value [not null]
return snapshot.val();
);
);
【问题讨论】:
【参考方案1】:var temp = this.checkIfUserHasMadeBet();
是异步调用,而您正在执行的 console.log(temp);
处于同步上下文中,因此在该调用之后立即该值未解析并且为 null 。
更新
首先尝试实现这一点的方式有一些错误,最重要的是,最好让服务拥有这种操作,而不是在组件本身中拥有它。
组件将调用服务方法,该方法会将快照值保存在服务的subject
或behaviour subject
中,然后您的组件将订阅该服务 observable 在订阅中获取快照的值并执行所有必要的操作。
看看@这个link - 不要使用 Observables,而是使用行为主题或重放主题在组件之间传递数据(共享服务)。
按照这种方法将值传递给同一组件,上面的链接就像一个要点,让您遵循而不是实际答案。在您的场景中,不会有观察或更新组件,这两个组件都是一个。
【讨论】:
在 observable 内部还有嵌套的异步调用,这使得使用起来很困难。我建议 OP 阅读 RxJS 及其运算符的强大功能,以便轻松使用它们。 好的,非常感谢,我该如何让它异步等待调用完成? @AdamGoldberg 更新了如何获得价值的蓝图以上是关于js问题 看看为啥总是弹出 undefined 我只是想吧所有数组浏览一遍的主要内容,如果未能解决你的问题,请参考以下文章
我安装了Nmap后使用弹出了下面窗口的问题,恳求各位大佬们帮看看这是为啥。