栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

将父范围中的变量传递给回调函数

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

将父范围中的变量传递给回调函数

回调函数可以

myArr
很好地识别/修改。问题是,当
console.log(myArr)
执行标记为“不工作”的标签时,回调尚未触发。

让我们稍微更改一下代码:

var myArr = [];function show_fb() {    var firebase = new Firebase('https://scorching-fire-6816.firebaseio.com/');    firebase.on('child_added', on_post_added); // steps 1-3    console.log(myArr);  // step 4    return myArr;        // step 5};function on_post_added(snapshot) {  // step 6    var newPost = snapshot.val();    myArr.push(newPost.user);       // step 7    console.log(myArr);  // step 8}

现在,可能会更容易了解发生了什么。

  1. 您注册一个侦听器
    child_added
    ,该侦听器将调用
    on_post_added
    添加到Firebase中的每个帖子
  2. 这将导致对服务器的调用,这可能需要花费大量时间才能返回
  3. 同时,您的Javascript代码继续,并且…
  4. 记录数组,该数组在此阶段仍为空
  5. 然后返回一个空数组
  6. 现在,服务器会在某个时候返回新值,并调用您的回调
  7. 这意味着我们可以毫无问题地将其添加到数组中
  8. 并将其记录到控制台会显示预期值

像这样处理异步代码/回调需要一些时间,但是对于使用Firebase或任何其他类似AJAX或事件驱动的技术来说至关重要。将回调的代码放在单独的函数中有时会使查看正在发生的事情变得容易一些。

对于Firebase,它也可能有助于认识到事件被调用

child_added
是有原因的。每当将孩子添加到Firebase中时,就会调用此方法,而不仅仅是在您首次注册回调时。因此,几分钟后,当其他客户端添加了一个子代时,您的回调仍将触发,从而将一个新的子代添加到
myArr
。在那个阶段,以上步骤4和5中的代码将长期执行,并且不会再次执行。

解决方案很简单:在将孩子添加到回调中之后,将您要执行的任何操作放入:

var myArr = [];function show_fb() {    var firebase = new Firebase('https://scorching-fire-6816.firebaseio.com/');    firebase.on('child_added', on_post_added);};function on_post_added(snapshot) {    var newPost = snapshot.val();    myArr.push(newPost.user);    console.log(myArr);    // do whatever else you need to do for a new post}


转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/413409.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号