Javascript Promises (Q)不会等待下一个问题被解决
Javascript Promises (Q) does not wait to be resolved before going to the next one
我有这个代码,它试图加载一个电子表格,然后它需要做一些事情,然后再次加载:
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次,如debug中所示:
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
为什么链中的第二个承诺不等待链中的第一个承诺?
您需要在函数中包装第二个load
调用,并从.then()
回调中正确返回值:
google.loadSpecificSheet(spreadsheetName, worksheetName)
.then(
function(spreadsheet) {
console.log("loaded");
return spreadsheet;
},
function(err) { node.warn("sheet failed to load: " + err); }
)
.then(function() {
return 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);
});
(注意,我不能真正测试这个)
相关文章:
- 等待1个函数完成后再运行下一个函数
- 吞咽-如何在管道中运行一些东西,并让下一个管道等待
- 如何等待 Node.js 中的下一个事件
- RxJS 在处理下一个缓冲块之前等待 ajax respose
- 在循环中使用 q promise 的最佳方法是什么?等待链完成,然后再迭代到下一个
- JavaScript循环等待一些函数返回,然后执行下一个循环
- 在jQuery中,有一种方法可以在数组上循环,这样在循环到下一个循环之前,它首先等待来自服务器的响应
- AngularJS动画带有回调,等待下一个动画开始
- Q -在调用下一个操作之前等待操作完成
- 当使用带有单个套接字的httpAgent时,它会在发送下一个请求之前等待响应吗?
- 以编程方式触发事件,并等待直到前一个事件的动作完成,以触发下一个事件
- jQuery/JS -等待JSON块处理完成后再开始下一个块
- 需要函数等待事件处理程序完成后再执行下一个函数
- 我如何使for循环等待db承诺完成之前,它继续下一个迭代
- JS磁带-等待前一个异步测试完成,以移动到下一个测试
- 等待函数完成后再继续执行$中的下一个循环.每个函数
- Javascript Promises (Q)不会等待下一个问题被解决
- 等待iframe加载后再触发下一个函数
- AJAX-等待数据追加,然后循环下一个
- 在调用下一个函数之前,如何等待一个函数完成呢