你好:我是新的nodejs和摩卡。我正在努力從函數調用的返回值。即使(我認爲)我已經適當地使用了回調done(),它總是返回'未定義'。NodeJS,函數調用不返回undefined即使完成
在下面的例子中,我如何確保get()的返回值總是返回正確的值而不是'undefined'。在這個函數中,我使用requestJS模塊打開google.com並返回內容類型。但是,它目前返回未定義。
非常感謝!
更新後作出反饋:
- 包括
Test Case 3
例如,爲實現Callback
。 結果是:我現在可以根據需要打印數據。但是,我得到並告訴我要調用done()。我做錯了什麼?節點終端上
結果交運行
suite
PRINT DATA: 200 text/html; charset=ISO-8859-1
√ Test case 1 (607ms)
undefined (<< ****** how to return the correct value?**)
PRINT DATA: 200 text/html; charset=ISO-8859-1
√ Test case 2 (603ms)
PRINT DATA: 200 text/html; charset=ISO-8859-1
√ Test case 3
Error: Timeout of 2000ms exceeded. For async tests and hooks, ensure "done()" is called; if returning a Promise, ensure it resolves.
...
Google.js
var request = require('request');
describe('suite', function(){
it('Tase case 1', function(done){
var options = { url: 'http://www.google.com', headers: {'Content-Type': 'text/html'}};
request.get(options, function (err, res, body){
console.log("PRINT DATA: " + res.statusCode + ' ' + res.headers['content-type']);
//do some stuff here
done();
});
});
it('Test case 2', function(done){
console.log(get(done));
});
it('Test Case 3', function(){
doCallback(callbackHandler);
});
});
function get(done){
var options = {
url: 'http://www.google.com',
headers: {'Content-Type': 'text/html'},
encoding: null
};
request.get(options, function(err, res, body){
console.log("PRINT DATA: " + res.statusCode + ' ' + res.headers['content-type']);
//do some stuff here
return done(), res.headers['content-type'];
});
}
function callbackHandler(data) {
console.log("PRINT DATA: " + data.statusCode + ' ' + data.headers['content-type']);
}
function doCallback(done){
var options = {url: 'http://www.google.com', headers: {'Content-Type': 'text/html'}, encoding: null};
request.get(options, function(err, res, body){
var finalData = res;
return done(finalData);
});
}
歡迎** **異步的奇妙世界!你不能那樣做;你需要使用回調或承諾。 – SLaks
感謝@SLaks爲您提供指導。我現在爲原始問題添加了一個'callbacks'的例子。請參考「測試案例3」。我現在得到的數據,但我得到一個錯誤告訴調用done()。我不知道如何解決這個問題。也許我的方法是不正確的。請幫忙。 –
您將兩個參數傳遞給僅接受一個參數的函數。你期望做什麼? – SLaks