如何在Javascript中创建后台进程
How to create a background process in Javascript
我正在编写一个web进程来模拟Connect4棋盘游戏。我使用一个敏捷控制器来设置它,它有七列六行,每个单元格引用为c1r1,如下所示。
$scope.c1r1 = $scope.counterWhite;
$scope.c1r2 = $scope.counterWhite;
$scope.c1r3 = $scope.counterWhite;
.
.
$scope.c7r4 = $scope.counterWhite;
$scope.c7r5 = $scope.counterWhite;
$scope.c7r6 = $scope.counterWhite;
当用户点击任何单元格时,它会引发一个事件,我想显示计数器在可用单元格中的下降,代码如下
$scope.c1r1 = $scope.counterYellow;
setTimeout(fillC1(), 1000);
$scope.c1r1 = $scope.counterWhite;
$scope.c1r2 = $scope.counterYellow;
setTimeout(fillC1(), 1000);
$scope.c1r2 = $scope.counterWhite;
$scope.c1r3 = $scope.counterYellow;
setTimeout(fillC1(), 1000);
$scope.c1r3 = $scope.counterWhite;
$scope.c1r4 = $scope.counterYellow;
setTimeout(fillC1(), 1000);
$scope.c1r4 = $scope.counterWhite;
$scope.c1r5 = $scope.counterYellow;
setTimeout(fillC1(), 1000);
$scope.c1r5 = $scope.counterWhite;
$scope.c1r6 = $scope.counterYellow;
当我运行它时,什么都没发生,计数器只出现在底部,所以我需要一个线程来使它正常工作,但由于JavaScript不执行线程,我想知道是否还有其他答案,比如Web Workers。
对,设置单元格的方式是问题的一部分。
使用数组代替$scope.cXrY
变量的负载:
$scope.cells = [];
var x, y;
for(x = 0; x < 7; x ++){
$scope.cells[x] = [];
for(y = 0; y < 6; y ++){
$scope.cells[x][y] = $scope.counterWhite;
}
}
好了,所有单元格都在一个变量中
您应该使用$scope.cells[2][4]
而不是$scope.c2r4
。
现在,对于检查细胞的计数器:
function iterateOverCells(){
fillC1()
$scope.cells[x][y] = $scope.counterWhite; // Make the previous cell white
x++; // Get next cell position
if(x >= 7){
x = 0;
y++;
}
$scope.cells[x][y] = $scope.counterYellow; // Current cell yellow
if(x < 7 && y < 6) // If we're not at the last cell
setTimeout(iterateOverCells, 1000); // Go to the next cell in 1 second
}
var x = 0, y = 0;
$scope.cells[x][y] = $scope.counterYellow; // Make the first cell yellow
setTimeout(iterateOverCells, 1000); // Next cell in 1 second
Web Workers没有访问DOM的权限,它们用于计算。我不知道你为什么要使用后台线程,但以下是你可以做到的:
假设你用后台代码编写了一个脚本,当完成任务时,它会发布消息(稍后会返回:
function doWork() {
postMessage("did something");
setTimeout(doWork, 2000);
}
doWork();
现在,检查浏览器是否支持网络工作者,创建一个,并监听从中发布的消息:
if(typeof(w) == "undefined") {
executer = new Worker("background.js");
}
executer.onmessage = function(event){
document.getElementById("results").innerHTML = event.data;
};
当你用完它后,你可以这样删除它:executer.terminate();
相关文章:
- 创建一个类似链接的按钮,并通过Javascript函数打开一个新的弹出窗口
- 为effect Composer创建GodRays效果过程
- 从javascript创建一个列表
- jar文件的后台进程,如何在进程结束时异步通知我
- 如何在JavaScript中创建一个等待函数,允许您在后台运行音频等内容
- 在后台进程中发送电子邮件
- Chrome扩展程序:检测从后台创建窗口事件
- 如何在Phonegap应用程序中创建一个简单的服务,以便在后台运行setInterval()
- AngularJS:后台进程
- 如何在Javascript中创建后台进程
- PHP后台进程类似于Nodejs
- 在node.js中使用工作/后台进程vs .异步调用
- 创建子进程,并在进程被调用后杀死它
- 如何以特定用户的身份使用Node创建子进程
- 使用canvas创建桌面通知图像,只有一个图像可以从后台页面工作
- 如何在后台创建异步循环
- Node.js中的后台进程
- 使用Node.JS运行后台进程
- 使用服务工作进程的提取事件中的字符串创建 HTML 响应
- 如何管理与后台进程相结合的模块实例