并行执行功能并等待其完成
Parallel execution of the functions and waiting for their completion
我怎么能等到这两个函数结束,并且只有在为它们调用回调之后才能继续脚本。
我注意到了jQuery deferred.then(),但我不知道如何在中使用它
GoogleDriveModule.checkAuth(function(authResult) {
if (authResult) {
return parts_count += 1;
}
});
DropboxModule.isAuthenticated(function(authResult) {
if (authResult) {
return parts_count += 1;
}
});
创建两个延迟对象并在回调中解析它们。然后您可以使用$.when
:等待两个延迟
var googleDone = $.Deferred(),
dropboxDone = $.Deferred();
GoogleDriveModule.checkAuth(function(authResult) {
googleDone.resolve();
if (authResult) {
return parts_count += 1;
}
});
DropboxModule.isAuthenticated(function(authResult) {
dropboxDone.resolve();
if (authResult) {
return parts_count += 1;
}
});
$.when(googleDone, dropboxDone).then(function() {
alert("Both authentication checks completed.");
});
如果准备好了,可以有2个布尔值并签入回调函数:
var gDriveREADY = false, dBoxREADY = false;
GoogleDriveModule.checkAuth(function(authResult) {
if (authResult) {
return parts_count += 1;
}
gDriveREADY = true;
doSomething()
});
DropboxModule.isAuthenticated(function(authResult) {
if (authResult) {
return parts_count += 1;
}
dBoxREADY = true;
doSomething();
});
function doSomething(){
if(dBoxREADY && gDriveREADY){
//Your code
}
}
在回调中,您可以切换一个其他函数检查的简单标志:
var driveDone = 0
, dropDone = 0
;
GoogleDriveModule.checkAuth(function(authResult) {
driveDone = 1;
if (authResult) {
parts_count += 1;
}
if(dropDone){
bothDone();
}
});
DropboxModule.isAuthenticated(function(authResult) {
dropDone = 1;
if (authResult) {
parts_count += 1;
}
if(driveDone){
bothDone();
}
});
function bothDone(){}
这比延迟方法开销更小,但也不那么干净。
相关文章:
- 添加文字和评论功能更新Div
- JavaScript打印功能使日历停止工作
- 单击按钮以等待单击按钮
- React组件等待所需道具进行渲染
- 每当您在选择器内移动鼠标时,悬停功能就会重复
- 如何防止网页加载后自动启动功能
- 除修剪外的其他功能
- 悬停功能触发器
- 并行执行功能并等待其完成
- 等待Javascript网页抓取功能完成,然后再运行下一页
- 等待用户点击而不是页面加载来启动功能
- 等待ajax响应相同的功能
- 流星铁路由器等待与异步功能
- 等待执行功能,直到新的数据反映在浏览器中
- 等待某些东西停止来触发功能
- Angular等待Ajax完成服务功能
- setTimeout立即启动功能,而不是等待
- Javascript:等待几帧后再继续功能
- 功能完成后如何等待(2秒)
- 具有延时功能的输入触发器,当输入值发生变化时等待