2016-07-30 17 views
1
music.playsong = function(vars){ 
//vars is an array with a Key named "song" 
youTube.search(vars["song"], 2, function(error, result) { 
    if (error) { 
    console.log(error) 

    return; 
    }else { 
    console.log("Success") 
    return result 
} 
}) 
} 

ich derzeit diese Funktion alsRückkehr Variable aus Rückruf in eine definierte Funktion-NodeJS

music.playsong(data) 

jedoch in dieser Funktion nenne ich kann nicht den zugrunde liegenden Rückruf zugreifen und den Wert aus, dass bekommen. Wie bekomme ich das music.playsong(), um das Ergebnis des Rückrufs ohne blockierende Ausführung zurückzugeben?

Antwort

0

Sie möchten eine asynchrone Funktion als Synchronisierung verwenden. Also ist es nicht möglich. So müssen Sie Ihre Methode ändern async so sein:

music.playsong = function(vars, cb){ 
//vars is an array with a Key named "song" 
youTube.search(vars["song"], 2, function(error, result) { 
    if (error) { 
    console.log(error) 

    process.nextTick(() => { 
    cb(error) 
    }) 
    }else { 
    console.log("Success") 
    process.nextTick(() => { 
     cb(null, result) 
    }) 
} 
}) 
} 
0
music.playsong = function(vars){ 

youTube.search(vars["song"], 2, function(error, result) { 
if (error) { 
    return callback("Error",{}); 
}else { 
    console.log("Success") 
    return callback(""success",result) 
    } 
}) 
} 
function callback(data){ 
//TODO 
} 
0

Es sieht so aus, dass youtube.search eine asynchrone Aktion.

In diesem Fall sollten Sie Promise

verwenden z.B.

music.playsong = function(vars) { 
    return Promise(resolve, reject) { 
    //vars is an array with a Key named "song" 

    youTube.search(vars["song"], 2, function(error, result) { 
     if (error) { 
     return reject(err); 
     } 
     console.log("Success") 
     return resolve(result); 
     } 
    }) 
    } 
} 

music.playsong('').then(function(result) { 
    // you will get result here 
}); 

In Versprechen, haben Sie resolve und reject Handlungs async Handhabung.

wenn resolve genannt wurde, wird es data zu .then passieren, wenn reject caleed bekam, es err-.catch

passieren
Verwandte Themen