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

我目前在調用這個函數作爲返回從回調變量爲定義函數的NodeJS

music.playsong(data) 

然而,在此功能,我不能訪問底層的回調,並從該值。我如何得到這個music.playsong()返回回調的結果沒有阻止執行?

回答

0

您希望使用異步功能作爲同步。所以這是不可能的。所以,你需要改變你的方法是異步這樣的:

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

它看起來像youtube.search是一個異步動作。

在這種情況下,你應該使用Promise

例如

​​

在無極,你將有resolvereject處理異步操作。

resolve接到電話,它會通過data.thenreject得到caleed,它會通過err.catch