-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathAsyncFun.js
More file actions
84 lines (75 loc) · 2.24 KB
/
AsyncFun.js
File metadata and controls
84 lines (75 loc) · 2.24 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
const scheduler = require('./dgt-scheduler')
//异步代码变同步代码
var AsyncFun = (function(){
var task = [];
var isRun = false;
var data = {}; //从外部传来的变量。 如果出现未定义变量时,请在这里传参。 AsyncFun.data.xxxx
var process = function (){
if(task.length ===0) return;
isRun = true;
scheduler.add(function*() {
if(task.length !==0){
var str = task[0].toString();
var l = str.indexOf('{') +1
var r = str.lastIndexOf('}')
var code = str.substring(l, r);
if(code.indexOf('resolve(') == -1){//代码中注释时出错,注释的代码也会被找到。 并执行以下语句,所以出错。
code = code.substring(0, code.lastIndexOf('}'))
code+= '\n resolve();})';
}
// console.log(code)
yield scheduler.waitPromise(eval(code));
task.shift();
}
// console.log('----------')
if(task.length !== 0 ) process();
else isRun = false;
})
}
var run = function (fn){
if(typeof fn == undefined) return;
else task.push(fn)
if(task.length !==0 && !isRun){
process()
}
}
var clear = function(){
task = [];
}
return{
run: run,
clear: clear,
data: data
}
})();
module.exports = AsyncFun;
//----------------例子
// Promise体内代码 自行修改。 注意: 最好写上 resolve()
// 没写时.自动在代码最后加入resolve() ,解决报错问题,但不建议这样使用,因为会发生不同步的问题。
// function fun1(){
// new Promise(function(resolve, reject) {
// setTimeout(function() {
// console.log('--1-----')
// resolve() //必写
// }, 1000)
// })
// }
// AsyncFun.run(fun1);
// AsyncFun.run(function(){
// new Promise(function(resolve, reject) {
// setTimeout(function() {
// console.log('---2----')
// //没有加resolve所以,跟下面的一起执行
// }, 1000)
// //自动添加resolve的位置。
// })
// });
// AsyncFun.run(`function(){//可以用字符串的方式添加
// new Promise(function(resolve, reject) {
// setTimeout(function() {
// console.log('---3----')
// resolve();//程序执行完的标志
// }, 1000)
// })
// }`);
// AsyncFun.run(fun1);