簡體   English   中英

如何使用async.series node.js將request.get的值傳遞給回調

[英]How to pass the value of the request.get to the callback using async.series node.js

我想顯示我的代碼:

    request({url: API_URL}, function (error, response, body) {

    if (!error && response.statusCode == 200) {

        console.log("Items received with success.");
        var data = JSON.parse(body);

        // catch duration from video
        for(var list in data) {
            var item = data[list];

            async.series([
                function(callback){
                    console.log("I'm inside fileExists function");
                    var result = '';
                    request.get('http://tobeymotos.com.br/video.mp4', function (error, response, body) {
                        if (!error && response.statusCode == 200) {
                            var video = body;
                            console.log("File exists and is OK");
                            var result = true;
                            console.log("Valor da result", result);
                        }
                        else{
                            console.log("This file do not exists, check error: "+ error);
                            var result = "xixi";
                        }
                    });
                    // usar aqui
                    callback(null, result);
                },
                function(callback){
                    // catch video duration
                    file = "http://tobeymotos.com.br/video.mp4"; // used as e.g.
                    console.log("I'm inside getVideoDuration function");
                    getDuration(file).then(function (duration) {
                        console.log("Duração do vídeo: " +duration);
                        return duration;
                    });
                    callback(null, 'b');
                },
                function(callback){
                    // code c
                    callback(null, 'c');
                },
                function(callback){
                    // code d
                    callback(null, 'd');
            }],
            // optional callback
            function(err, results){
                console.log(results);
            }
            )

            return 0;           
        }
    } else {
        console.log("Error: "+error);
    }
});

我使用async.series執行一些functions ,因為我依賴第一個的結果來繼續下一個。

如您所見,我在第一個function有一個“ request.get ”,其中:

request.get('http://tobeymotos.com.br/video.mp4', function (error, response, body) {
                    if (!error && response.statusCode == 200) {
                        var video = body;
                        console.log("File exists and is OK");
                        var result = true;
                        console.log("Valor da result", result);
                    }
                    else{
                        console.log("This file do not exists, check error: "+ error);
                        var result = "xixi";
                    }
                });
                // usar aqui
                callback(null, result);

問題是我不能在callback調用result,只是不能“ exitrequest.get

一些幫助?

request({url: API_URL}, function (error, response, body) {

    if (!error && response.statusCode == 200) {

        console.log("Items received with success.");
        var data = JSON.parse(body);

        // catch duration from video
        for(var list in data) {
            var item = data[list];

            async.series([
                function(callback){
                    console.log("I'm inside fileExists function");
                    var result = '';
                    request.get('http://tobeymotos.com.br/video.mp4', function (error, response, body) {
                        if (!error && response.statusCode == 200) {
                            var video = body;
                            console.log("File exists and is OK");
                            var result = true;
                            console.log("Valor da result", result);
                            callback(null, result);
                        }
                        else{
                            console.log("This file do not exists, check error: "+ error);
                            var result = "xixi";
                            callback(null, result);
                        }
                    });
                    // usar aqui

                },
                function(callback){
                    // catch video duration
                    file = "http://tobeymotos.com.br/video.mp4"; // used as e.g.
                    console.log("I'm inside getVideoDuration function");
                    getDuration(file).then(function (duration) {
                        console.log("Duração do vídeo: " +duration);
                        return duration;
                    });
                    callback(null, 'b');
                },
                function(callback){
                    // code c
                    callback(null, 'c');
                },
                function(callback){
                    // code d
                    callback(null, 'd');
            }],
            // optional callback
            function(err, results){
                console.log(results);
            }
            )

            return 0;           
        }
    } else {
        console.log("Error: "+error);
    }
});

您的回調位於request.get函數之外,這可能是由於Node JS的性質導致您的回調在請求返回之前調用。 節點JS是非阻塞的,因此除非明確告知,否則在進入下一個之前,它不會等待函數執行。 將回調放入request.get響應函數中將強制其等待請求返回,然后對結果進行回調

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM