我想这个问题不仅仅针对YUI,而是我正在使用的JS库,具体的答案会有所帮助。
基本上在加载页面时,我想要一个脚本使用Y.io运行一些XHR,如果它们都成功返回数据,那么我希望脚本继续下一步,这将操纵收到的数据
我可以想到一些这样做的方法,但它们对我来说都显得有些笨拙,我希望有人有更好的建议。到目前为止我的想法:
那里有更好的想法吗?我此刻并不喜欢我的任何一个,但我倾向于选择二。
答案 0 :(得分:2)
您不需要对Y.io调用进行排队。只需将它们全部发送出去,当它们全部返回时,继续前进。
var data = {};
function step(id, o, part) {
try {
data[part] = Y.Lang.JSON.parse(o.responseText);
if (data.a && data.b && data.c) {
processData(data);
}
}
catch (e) {
/* handle bad JSON, failure case */
}
}
Y.io(a_url, { on: { success: step }, 'arguments': 'a' });
Y.io(b_url, { on: { success: step }, 'arguments': 'b' });
Y.io(c_url, { on: { success: step }, 'arguments': 'c' });
答案 1 :(得分:1)
两种实现都有其优点:
JavaScript适用于这些方法中的任何一种。第一个是直接的,第二个可以通过链接回调来完成。
如果您需要/可以尽早开始处理数据,则第二种方法更可取。如果在处理之前需要所有数据,则需要第一种方法。这完全取决于你的情况。一般来说,如果你可以摆动它,第二种方法(多部分而不是一个大的反应)是可取的。