我正在使用npm包「mssql」 爲了打開連接。我必須這樣做:在類初始化程序中爲node.js解決回調問題
var getOneToken = function (callback) {
var token = "";
var connection = new sql.Connection(dbConfig, function(err){ //<-----line 3
if(err) console.log(err);
var sqlrequest = new sql.Request(connection);
sqlrequest.query('select top 1 [accessToken] from AccessToken', function(err, recordset){
if(err) console.log(err);
token = recordset[0]['accessToken'];
connection.close();
callback(token);
})
});
//how to await the whole block at the top and prevent early execution of code afterwards.
};
該塊中的代碼需要延遲,直到數據庫返回結果,這是令牌。 然後可以進行進一步的操作。
我不知道如何等待代碼。
因爲我想:
connection = await { new sql.Connection(dbConfig, defer (var err)) }
它失敗。因爲tamejs不允許您將關鍵字「等待」放在那裏。
我也用藍鳥,asyncawait庫,但是,它是很難拉平整個街區 和階級「等待」初始化尤其是對第3行
如何處理這個問題?
對不起,我還是沒有意識到問題是什麼。你從SQL獲得一個令牌;那麼你想怎麼做?什麼具體阻止你這樣做?還是僅僅是你不瞭解回調和延續傳球的事實? – Amadan 2014-08-29 07:03:48
@Amadan我必須使用回調來傳遞'返回值',我發現沒有任何工具可以等待第3行的塊。因爲我總是在調用這段代碼後打印'undefined'值。我仍然不熟悉延續傳球風格... – CodeFarmer 2014-08-29 07:19:26
你不能等。這不是節點的工作原理。將值賦給'callback',就像代碼已經做的那樣。忘記「返回」。 'return'只對你可以立即回饋的東西有用;如果你需要等待,那就是'callback'的作用。所有的異步庫(async,await ...)只是簡化了幾個回調的同步,並不適用於你正在做的任何事情。 Tamejs實際上不是JavaScript。所以,我再次問:在「等待」之後你想做什麼? 「回報價值」不是一個答案,認爲更大。你想要什麼令牌? – Amadan 2014-08-29 07:23:50