2017-08-30 88 views
0

首先,我是初學者在javaScript異步和回調。操作後嵌套的異步函數返回結果

我做了這種方法,並正常工作。

Test.prototype.test3 = function(callback) { 

return apiClient.returnAllmember(callback); 

} 

我需要jsonQuery

Test.prototype.test2 = function(name,callback) { 

apiClient.returnAllmember(function(err, data){ 
    if (err){ 
     console.log('ERROR', err); 
     return; 
    } 

    return jsonQuery(name+'[**]', {data: data}).value 
}); 
}; 
+3

你不能從異步方法返回。你需要看看承諾。 – epascarello

+0

你爲什麼不在任何地方調用'callback'? – Bergi

+1

您是否嘗試過使用承諾?一旦你把頭轉過來,使所有這些東西變得容易得多! –

回答

1

很抱歉打破它給你後,返回的結果,但不會有可能與異步的NodeJS模型。

你寧願做什麼是

Test.prototype.test2 = function(name,callback) { 
    apiClient.returnAllmember(function(err, data){ 
    if (err){ 
     console.log('ERROR', err); 
     callback(err) 
    } else { 
     callback(null, jsonQuery(name+'[**]', {data: data}).value) 
    } 
    }); 
}; 

什麼意味的是,你不要試圖從回調返回。相反,您使用可退回數據調用回調函數,並在回調中繼續處理。

+2

你錯過了'else'那裏。切勿兩次調用'callback'! – Bergi

+0

@Bergi ..我寧願添加一個返回值,但是'return'可能會讓代碼更難以正確讀取? –

+0

我認爲應該使用承諾,所以根本就沒有這個問題:-)當然,早期的'return'是一樣好,可能更常見,'else'更明確。 – Bergi