2016-07-30 5 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 
} 
}) 
} 

にコールバックから変数を返す私は、基礎となるコールバックにアクセスし、そのから値を取得することはできません。どのようにすればいいですか?music.playsong()実行をブロックせずにコールバックの結果を返すのですか?私は現在、ただし、この機能に</p> <pre><code>music.playsong(data) </code></pre> <p>としてこの関数を呼び出しています定義関数-NodeJS

答えて

0

同期として非同期機能を使用する必要があります。だからそれは不可能です。ですから、このようなasyncを指定するためにあなたの方法を変更する必要があります。そのyoutube.searchが非同期動作であるよう

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

に見えます。この場合

、あなたは、例えばPromise

を使用する必要があります

​​

の約束では、非同期アクションを処理するためのresolverejectを持つことになります。 resolveが呼ばれましたとき

、それはrejectがcaleedしまったとき、それが通過します.thendataを渡しますerrから.catch

関連する問題

 関連する問題