generator生成器实现文件逐一上传

146 阅读1分钟
 	// 实例一
	//循环逐步待上传的数据
	function* uploadPromise(formdatasArr) {
		for (let index = 0; index < formdatasArr.length; index++) {
			const formdata = formdatasArr[index];
			yield uploadApi(formdata,index)
		}
	}
	//模拟接口
	function uploadApi(formdata,index) {
		return new Promise((resolve, reject) => {
			setTimeout(() => {
				if (false) {
					reject(err);
				} else {
					resolve(index);
				}
			}, 1000);
		});
	}

	function run() {
		const {
			done,
			value
		} = gen.next()
		if (done) {
			// 执行到末尾
			console.log("done", value);
		} else {
			value.then((index) => {
				console.log(`上传文件第${index+1}个文件`);
				run();
			});
		}
	}
	var gen = uploadPromise([1, 2, 3, 4, 5])
	run()

// generator实例学习:

function* g1() {
  console.log("g1 start");
  yield* [1, 2, 3];
  return "foo";
}

var result, yieldResult;
function* g2() {
  console.log("g2 start");
  result = yield* g1();
  yieldResult = yield "g5 yield";
  return "g5 inner";
}

var iterator = g2();

console.log(iterator.next()); // {value: 1, done: false}
console.log(iterator.next()); // {value: 2, done: false}
console.log(iterator.next()); // {value: 3, done: false}

console.log(iterator.next()); // {value: "g5 yield", done: false},这时 result 被赋值 ‘foo’
console.log(result); // foo
console.log(iterator.next()); // {value: "g5 inner", done: true}
console.log(yieldResult); // undefined