[英]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,只是不能“ exit
” request.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.