Javascript 将第二个查询的结果添加到第一个查询的答案
我的问题是,至少有一个then()函数没有等待前一个函数结束 代码被缩短,但大致如下所示:Javascript 将第二个查询的结果添加到第一个查询的答案,javascript,dexie,Javascript,Dexie,我的问题是,至少有一个then()函数没有等待前一个函数结束 代码被缩短,但大致如下所示: var objCheck = {}; var id = thisClick.attr('id'); APP.db.checkInfo.get(id).then(function (resultDetail) { objCheck.details = resultDetail; }).then(function () { var ch
var objCheck = {};
var id = thisClick.attr('id');
APP.db.checkInfo.get(id).then(function (resultDetail) {
objCheck.details = resultDetail;
}).then(function () {
var checkPoints = APP.db.checkRooms.where('check_id').equals(id);
checkPoints.toArray(function(dataArray) {
dataArray.measures = [];
objCheck.checkpoints = dataArray;
});
}).then(function () {
var arrayLength = objCheck.checkpoints.length;
for (var i = 0; i < arrayLength; i++) {
var roomId = objCheck.checkpoints[i].room_id;
var measure = APP.db.measures.where('room_id').equals(roomId);
measure.toArray(function(dataArray) {
objCheck.checkpoints[i].measures = dataArray;
});
}
}).then(function () {
$.ajax(
// Here I send then objCheck to the server
).done(...);
}).catch(function(error) {
alert ("Error upload: " + error);
});
var objCheck={};
var id=thisClick.attr('id');
APP.db.checkInfo.get(id).then(函数(resultDetail){
objCheck.details=resultDetail;
}).然后(函数(){
var checkPoints=APP.db.checkRooms.where('check_id')。等于(id);
checkPoints.toArray(函数(dataArray){
dataArray.measures=[];
objCheck.checkpoints=dataArray;
});
}).然后(函数(){
var arrayLength=objCheck.checkpoints.length;
对于(变量i=0;i
如果我在最后将objCheck打印到控制台,我会看到度量值已填充。但是在ajax()调用中,它没有被发送。所以在我看来,最后一个then()在第二个完成之前运行
这似乎是我这边的误解。有人能告诉我我的逻辑出了什么问题吗?你必须在每个函数的回调中返回一些东西(承诺或只是对象、数组等),然后:
var objCheck = {};
var id = thisClick.attr('id');
APP.db.checkInfo.get(id).then(function (resultDetail) {
objCheck.details = resultDetail;
return objCheck;
}).then(function () {
var checkPoints = APP.db.checkRooms.where('check_id').equals(id);
return checkPoints.toArray();
}).then(function (dataArray) {
dataArray.measures = [];
objCheck.checkpoints = dataArray;
var arrayLength = objCheck.checkpoints.length;
var promises = objCheck.checkpoints.map(function(chk) {
var roomId = chk.room_id;
return APP.db.measures.where('room_id').equals(roomId);
});
return Promise.all(promises);
}).then(function(res) {
objCheck.checkpoints.forEach(function(chekpoint, i) {
chekpoint.measures = res[i];
});
return objCheck
}).then(function () {
$.ajax(
// Here I send then objCheck to the server
).done(...);
}).catch(function(error) {
alert ("Error upload: " + error);
});
@利亚姆,谢谢。我不知道这件事。我想,因为我的问题是针对某个图书馆的,所以在标题中缩小范围是有意义的。我现在明白了,我需要更多地了解承诺。您的代码中有一个bug。在“chekpoint.measures=res[i];”行中,元素res[i]是一个Promise对象,而不是我需要的数据。我现在试图解决这个问题。谢谢你。