【问题标题】:How do I get data from setTimeout function in NodeJS如何从 NodeJS 中的 setTimeout 函数获取数据
【发布时间】:2015-09-16 21:21:31
【问题描述】:

有时在 nodejs 中我必须向其他主机发出请求。我的函数必须等到此请求的响应完成,但通常他们会进入下一行,而无需等待完成。 为了简化问题,我做了一个简单的代码片段,我想知道如何从这个函数中获取数据

function testCallback(){
    var _appData;
    setTimeout(function(){
        var a = 100;
        getData(a);
    }, 200);
    function getData(data){
        _appData = data;
    }
    return _appData;
}


console.log('testCallback: ', testCallback());

console.log 发出 undefined,我想知道这个函数如何得到结果是 100

【问题讨论】:

    标签: node.js


    【解决方案1】:

    基本上 setTimeout 是异步的,所以代码一直在运行,你的代码就变成这样了:

    function testCallback(){
        var _appData;
    
        return _appData;
    }
    

    没错,它是未定义的,因为你没有设置任何东西。

    你要做的是在你的函数中使用一个回调,所以当长任务(setTimeout)完成时你返回数据。

    类似这样的:

    function testCallback(cb){
        setTimeout(function(){
            var a = 100;
            getData(a);
        }, 200);
        function getData(data){
            cb(null, data);
        }
    }
    

    当调用它时,你必须传递一个函数作为参数(回调标准有 2 个参数,(err, value)。)

    testCallback(function(err, value) { console.log(value); });
    

    【讨论】:

    • 但是如果我需要返回数据,我不想让其他函数处理结果,我该怎么办..?? @DevAlien
    • 如果你想要一个返回数据,你不应该做任何异步的事情。 Node.JS 在单线程中工作,因此它一次可以做一件事。如果你花很多时间做一件事,你会阻止其他一切。因此,当您进行 HTTP 调用时,调用是从另一个进程完成的,当它完成时,它将通过回调返回给您。如果您刚开始,您必须与 PHP 或其他语言有所不同。我建议你也看看 Promises,一旦你了解了它们的工作原理,它们就会非常酷。
    猜你喜欢
    • 2020-07-03
    • 2019-10-17
    • 1970-01-01
    • 2023-03-03
    • 1970-01-01
    • 2015-05-29
    • 2011-10-19
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多