2017-08-30 82 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