我使用Trello client.js库在Trello列表中创建一些卡片,通过循环表格中的行。但是,按顺序创建卡片非常重要。现在,我的代码看起来像这样:
$("#list > tbody > tr").each(function() {
$item = "Item: "+$(this).children('td').append(' ').text();
Trello.post("cards", { name: $item, idList: "myID"});
});
这可以很好地创建所有卡片;但是,它们并不总是以正确的顺序创建。这并不奇怪,因为Trello.post函数是异步的,因此调用按顺序生成,但可能在不同的时间内完成。
任何想法如何解决?看起来我需要阻止,直到每次通话结束,但我不太确定如何做到这一点。有任何一般或jquery方式吗?我可以为每个调用指定一个成功函数,所以看起来我也可以按顺序递减,但不太确定如何执行此操作,尤其是在使用每个函数时。
答案 0 :(得分:2)
我可以看到两个选项。您可以串行拨打电话,也可以使用pos
选项设置订单。
系列调用:我建议使用像async这样的库,这样做很简单:
async.eachSeries($("#list > tbody > tr"), function(item, cb) {
var title = "Item: "+$(item).children('td').append(' ').text();
Trello.post("cards", { name: $item, idList: "myID"}, cb);
}, function() {
// Done! Do anything that needs to happen last here.
});
pos
:卡片按其pos
值排序;它默认为当前最后一张卡的pos + 1024,但你可以设置它以确保正确的顺序:
var pos = 1024;
$("#list > tbody > tr").each(function() {
$item = "Item: "+$(this).children('td').append(' ').text();
Trello.post("cards", { name: $item, idList: "myID", pos: pos});
pos += 1024;
});