Javascript AngularJS中的生产者-消费者队列
几年前我就知道python和数据库了 但是我想提高我有限的JavaScript知识。对于我的玩具项目,我想在web浏览器中使用一个异步队列,并使用AngularJS 在python中有一个很好的类,我以前使用过这个类 现在我搜索类似的东西,但是在AngularJS中Javascript AngularJS中的生产者-消费者队列,javascript,angularjs,producer-consumer,Javascript,Angularjs,Producer Consumer,几年前我就知道python和数据库了 但是我想提高我有限的JavaScript知识。对于我的玩具项目,我想在web浏览器中使用一个异步队列,并使用AngularJS 在python中有一个很好的类,我以前使用过这个类 现在我搜索类似的东西,但是在AngularJS中 步骤1:in队列提取工作项(粉红色圆圈)。只是一个json字节的视图 步骤2:用户处理数据 步骤3:输出队列负责将结果发送到服务器 为什么会出现这种“复杂”的设置?因为我希望应用程序尽可能响应。in队列应该预加载一些数据
- 步骤1:in队列提取工作项(粉红色圆圈)。只是一个json字节的视图
- 步骤2:用户处理数据
- 步骤3:输出队列负责将结果发送到服务器
- 答:输入文本
- 比如这个问题:1到5的整数
- 难度:1到5的整数
保留浏览器重新加载之间的队列可以通过localStorage(html5)来完成。我会研究承诺,因为它们提供了您似乎需要的异步功能,可能会在初始阶段引入所有或一些问题。如果你真的需要离线访问服务人员,尽管他们只限于较新的浏览器 如果你不能使用服务人员,你可以创建一个服务(或工厂)来保存你所有的问题或提前阅读。如果在再次建立网络连接之前无法使用现有的答案,您可以使用$http服务尝试获取更多答案 例如,可以使用$http服务在$interval的循环中尝试获取新答案(并发布答案),从而检查网络 应用程序结构: 2个数组,一个带问题,另一个带答案 应用程序启动: 两个$interval对象,其中一个从服务器获取前10个问题。如果问题缓冲区长度<10,则会有新问题将其推送到数组中 另一个函数检查应答数组,如果通信可用,则将结果发送给服务器 当用户检查一个问题时,它会从第一个数组中弹出,并推入应答数组 就这些。。angular 2-ways数据绑定通过调用应用程序中的函数(如GiveMethRelatestQuestion)显示最古老的问题 希望有帮助 -后端服务仅用于模拟rest接口;我修复了一些错误,比如错误限制。所以,假设Plunker是最后一个版本 我没有足够的时间来改进下面的内容,但是,您可以假设这是一个起点 顺便说一下,我认为你需要:
用法:
angular
.module('myApp',['Queue']))
.controller('MyAppCtrl',函数($httpQueue,$scope){
var vm=$scope;
//使用route.resolve可能会更好!
$httpQueue
.pull()
.then(函数(任务){vm.tasks=tasks;})
.catch(函数(){vm.tasks=[{name:'',description:''}];})
;
vm.onTaskEdited=函数(事件、任务、表单){
event.preventDefault();
if(form.$invalid | | form.$pristine){return;}
返回$httpQueue.push(任务);
};
})
;代码>
重新思考一下,您的前端真的需要生产者-消费者吗?
在您的示例中,我认为在这种情况下,一个简单的pub sub
或$Q
就足够了
例如:
在您的示例中,创建一个订阅服务,questionHandlerService
,订阅提交的事件问题
,在您的questionService
中,当用户提交问题时,只需发布带有数据的事件提交的问题
。您无需等待来自问题处理服务的响应
请记住,javascript中只有一个主线程,如果您的方法将阻止ui,比如循环数组中的1000个项目,同步处理它们,那么如果将它们放入另一个主线程中,则没有任何帮助