我正在尝试使用JavaScript Trello API编译一张卡片列表,这些卡片可以来自任何列在任何名单中的用户板,名称为#34; todo"。
我成功地从所有名单中获得了一系列名单" todo"
...
}).then(function(list_data) {
console.log("List Data", list_data);
console.log("List Data Length", list_data.length);
var cards_arr = [];
$.each(list_data, function(index, value) {
Trello.get("/lists/" + value.id + "/cards?fields=name,shortUrl")
.then(function(cards) {
$.each(cards, function(index, card) {
cards_arr.push(card.id);
})
})
})
console.log("Cards Array", cards_arr);
return cards_arr;
})
当我查看控制台日志时,它会显示我的" list_data"变量我得到一个包含6个项目的数组,但由于某种原因,数组的长度等于0并且不允许我遍历"空"阵列。
我觉得我可能没有以最有效的方式使用Trello API,因此我将继续发布以下完整代码。
非常感谢任何帮助。感谢
var boards_arr = [];
// ==== LOOP THROUGH BOARDS
Trello.get("/member/me/boards?fields=name,id,idOrganization")
.then(function(boards) {
$.each(boards, function(index, board) {
if (board.idOrganization != "5112df8dad3201247401349e") return;
boards_arr.push(board.id);
});
return boards_arr;
}).then(function(board_data) {
var lists_arr = [];
console.log("Board Data", board_data);
$.each(board_data, function(index, value) {
Trello.get("/boards/" + value + "/lists?fields=id,name")
.then(function(lists) {
$.each(lists, function(index, list) {
var listName = list.name.replace(" ", "").toLowerCase();
if (listName != "todo") return;
lists_arr.push(list.id);
});
});
});
return lists_arr;
}).then(function(list_data) {
console.log("List Data", list_data);
console.log("List Data Length", list_data.length);
var cards_arr = [];
$.each(list_data, function(index, value) {
Trello.get("/lists/" + value.id + "/cards?fields=name,shortUrl")
.then(function(cards) {
$.each(cards, function(index, card) {
cards_arr.push(card.id);
})
})
})
console.log("Cards Array", cards_arr);
return cards_arr;
})
答案 0 :(得分:1)
由于您正在Trello.get
回调中运行异步操作($.each
),因此在这些元素完成之后,元素将不会被添加到数组中,这是之后 $.each
返回。因此,当您致电console.log(cards_arr)
时,尚未添加任何元素。
您应该做的是将Trello.get
中的承诺存储在数组中,然后调用Promise.all
等待所有内容完成,然后你获得所有结果后构建cards_arr
数组。由于这会分离异步和同步操作,因此您可以确保在之后调用console.log
时,cards_arr实际上已完成。
promise
.then(function(list_data) {
console.log("List Data", list_data);
console.log("List Data Length", list_data.length);
// do all operations and store results in an array
var resultPromises = list_data.map(function(value) {
return Trello.get("/lists/" + value.id + "/cards?fields=name,shortUrl")
});
// wait for all operations to complete
return Promise.all(resultPromises);
})
.then(function(results) {
// create cards_arr from results
var cards_arr = [];
$.each(results, function(index, cards) {
$.each(cards, function(index, card) {
cards_arr.push(card.id);
});
});
// this should print the correct array
console.log("Cards Array", cards_arr);
return cards_arr;
})