2016-05-15 17 views
0

Ich würde sagen, ich bin ein Anfänger Übergang in Zwischenprogrammierer und ich verstehe nicht vollständig Verschlüsse sowie verschachtelte Funktionen mit Rückgabewerten. Ich habe etwas gelesen und kann mich nicht wirklich darum kümmern.Verschachtelte Funktionen in Javascript mit einem Rückgabewert

Der folgende Code gibt nur undefined zurück. Ich gehe davon aus, dass dies eine verschachtelte Funktion ist, aber ich bin mir nicht sicher, wie ich es beheben kann.

var Twit = require('twit'); 
 
var request = require('request'); 
 

 
var T = new Twit({ 
 
    consumer_key:   'Removed for security reasons', 
 
    consumer_secret:  'Removed for security reasons', 
 
    access_token:   'Removed for security reasons', 
 
    access_token_secret: 'Removed for security reasons', 
 
}); 
 

 
var stream = T.stream('statuses/filter', {track: '#instagram'}); 
 

 
stream.on('tweet', function(tweet){ 
 
    if(!tweet.entities.media){ 
 
    console.log("No photo here"); 
 
    }else{ 
 
    var imageUrl = JSON.stringify(tweet.entities.media[0].media_url).replace(/^"(.*)"$/, '$1'); 
 
    console.log(describeImage(imageUrl) + " - " + imageUrl); 
 
    } 
 
}); 
 

 

 
function describeImage(imageUrl){ 
 
    
 
var options = { 
 
    url: "https://api.projectoxford.ai/vision/v1.0/describe?maxCandidates=1", 
 
    json: {url: imageUrl}, 
 
    method: 'POST', 
 
    headers: { 
 
     'Content-type' : 'application/json', 
 
     'Ocp-Apim-Subscription-Key' : 'Removed for security reasons' 
 
    } 
 
} 
 

 
    request(options, function(err, res, body){ 
 
    if(err){ 
 
     console.log(err); 
 
    } 
 
    //This is where I'm going wrong. 
 
    return JSON.stringify(body.description.captions[0].text); 
 
    }); 
 
    
 
    
 
}

Jede Hilfe wäre wunderbar!

+0

'request' ist asynchron machen' describeImage' asynchron, aber sie versuchen, um es synchron zu benutzen. Schauen Sie sich Versprechungen (Bluebird) oder Rückrufe an. – Wainage

Antwort

0

Aus zwei Änderungen in Code 1), wo describeImage Anruf gemacht und 2) wo u würden falsch

var Twit = require('twit'); 
 
var request = require('request'); 
 

 
var T = new Twit({ 
 
    consumer_key:   'Removed for security reasons', 
 
    consumer_secret:  'Removed for security reasons', 
 
    access_token:   'Removed for security reasons', 
 
    access_token_secret: 'Removed for security reasons', 
 
}); 
 

 
var stream = T.stream('statuses/filter', {track: '#instagram'}); 
 

 
stream.on('tweet', function(tweet){ 
 
    if(!tweet.entities.media){ 
 
    console.log("No photo here"); 
 
    }else{ 
 
    var imageUrl = JSON.stringify(tweet.entities.media[0].media_url).replace(/^"(.*)"$/, '$1'); 
 
    describeImage(imageUrl,function(imgUrl){ 
 
     console.log(imgUrl + " - " + imageUrl); 
 
    }); 
 
    } 
 
}); 
 

 

 
function describeImage(imageUrl,callBack){ 
 
    
 
var options = { 
 
    url: "https://api.projectoxford.ai/vision/v1.0/describe?maxCandidates=1", 
 
    json: {url: imageUrl}, 
 
    method: 'POST', 
 
    headers: { 
 
     'Content-type' : 'application/json', 
 
     'Ocp-Apim-Subscription-Key' : 'Removed for security reasons' 
 
    } 
 
} 
 

 
    request(options, function(err, res, body){ 
 
    if(err){ 
 
     console.log(err); 
 
    } 
 
    //Call Callback function here 
 
    return callBack(JSON.stringify(body.description.captions[0].text)); 
 
    }); 
 
    
 
    
 
}

Verwandte Themen