у меня есть этот код, который пытается загрузить таблицу, а затем он должен сделать что-то, а затем загрузить его снова:Javascript Promises (Q) не ждать, чтобы решить, прежде чем переходить к следующему один
var Q = require('q'),
editGoogleSpreadsheet = require('edit-google-spreadsheet');
loadSpecificSheet = function(_spreadsheetName, _worksheetName) {
return Q.ninvoke(editGoogleSpreadsheet, 'load', {
debug: true,
spreadsheetName: _spreadsheetName,
worksheetName: _worksheetName,
oauth: {
email: superSecretEmail,
keyFile: superSecretKeyfile
}
});
};
google.loadSpecificSheet(spreadsheetName, worksheetName).then(
function(spreadsheet) {
console.log("loaded")
},
function(err) { node.warn("sheet failed to load: " + err); }
).then(
google.loadSpecificSheet(spreadsheetName, worksheetName).then(
function(spreadsheet) {
console.log("loaded 2")
},
function(err) { node.warn("sheet failed to load 2: " + err); }
)
).catch(function(err) { node.warn("ToGoogleSheetNode Error: " + err); });
console.log("promises added to queue");
Но, загружает таблицу 2 раза одновременно, как показано в отладке:
promise added to queue
Logging into Google...
Logging into Google...
Logged into Google
Searching for Spreadsheet 'Book1'...
Logged into Google
Searching for Spreadsheet 'Book1'...
Searching for Worksheet 'Sheet1'...
Searching for Worksheet 'Sheet1'...
loaded 2
loaded
Почему второе обещание в цепи, не дожидаясь первого обещания в цепи? Мне это нужно ждать ...
Вы передаете результат * вызова * 'google.loadSpecficSheet()' во второй вызов '.then()'. – Pointy
Я думал, что я мог бы вызывать, когда мне не следовало ... как мне не вызывать google.loadSpecficSheet(), но все-таки дать ему необходимые параметры? – mattnificent