gpt4 book ai didi

javascript从回调返回给变量赋值(计时)

转载 作者:行者123 更新时间:2023-12-03 11:53:41 26 4
gpt4 key购买 nike

我在将 Firebase 调用函数的返回值分配给全局变量时遇到问题。这是我的功能:

  function getThePushNameById( path , id ){
path.once( 'value', function( data ){
if( data.child('id').val() != id ){
data.forEach( function( newData ){
var base = new Firebase( path.child( newData.name() ).toString() );
getThePushNameById( base, id );
})
}else{
//finishes the function when path is founded - returns the value
return path.name();
}
})
}

这是我设置请求的另一个文件:

var base = new Firebase(path/to/my/base);

var output = getThePushNameById( base , 2 )
console.log(output);

所以我的问题是 console.log 不会等待 output 被定义,而是自行运行并记录 undefined。我的问题是,是否有人知道如何让 console.log 等待值?

最佳答案

欢迎使用 JavaScript 异步编程。

当我们查看您的主要代码时:

var output = getThePushNameById( base , 2 )
console.log(output);

然后,您(逻辑上)假设 getThePushNameById 将在执行 console.log 语句之前完成。

不幸的是,当我们针对服务器进行编程时,这个假设是错误的。在您的情况下,getThePushNameById 会联系 Firebase,这可能需要很长时间才能完成。如果浏览器只是等待调用完成,则整个应用程序将被阻止。

浏览器不会阻止应用程序,而是将对服务器的调用转入后台事件。并且您传入一个函数,当后台事件完成时它将调用该函数。这就像您注册联邦 express 的递送通知一样。您不必在前门检查包裹是否已经在那里,而是在包裹投递后收到一条短信。

这种在完成后调用你的生成背景工作方法对于大多数现代网络来说都是必不可少的。你最好尽早接受它,而不是试图反对它。

在您的情况下,您可以通过将回调函数传入 getThePushNameById 并在收到来自 Firebase 的值时调用该函数来接受它:

function getThePushNameById( path , id, callback ){
path.once( 'value', function( data ){
if( data.child('id').val() != id ){
data.forEach( function( newData ){
var base = new Firebase( path.child( newData.name() ).toString() );
getThePushNameById( base, id, callback );
})
}else{
//finishes the function when path is founded - returns the value
callback(path.name());
}
})
}

getThePushNameById( base, 2, function(output) {
console.log(output);
});

关于javascript从回调返回给变量赋值(计时),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25697907/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com