To 1):是的,javascript是单线程的。由您来实现长时间运行的非阻塞操作。否则你可能会遇到
Slow Script Warnings
(见下一点)。
到2):看看
IncrementalCommand
类(描述了它的用法
here
). 有了它,您可以将长时间运行的操作分成小块,并向用户显示进度更新。一个小例子:
public class Starter implements EntryPoint {
private Label text = new Label();
private Label update = new Label();
@Override
public void onModuleLoad() {
Button btn = new Button("hit me");
btn.addClickHandler(new ClickHandler() {
@Override
public void onClick(ClickEvent event) {
text.setText("starting...");
startIncrementalWork();
}
});
RootPanel.get().add(text);
RootPanel.get().add(update);
RootPanel.get().add(btn);
}
private void startIncrementalWork() {
IncrementalCommand cmd = new IncrementalCommand() {
private int count = 0;
@Override
public boolean execute() {
if (count >= 10000) {
text.setText("finished");
return false;
}
for (int i = 0; i < 100; i++) {
update.setText("count " + count);
count++;
}
return true;
}
};
DeferredCommand.addCommand(cmd);
}
}
希望能有所帮助。