zoukankan      html  css  js  c++  java
  • async generator promise异步方案实际运用

    es7 async方案

    
    /******************async***********************/
    var timeFn=function(time){
    	return new Promise(function(resolve,reject){
    		setTimeout(function(){
    			console.log(2)
                resolve(3);
    		},time)
    	})	
    }
    
    
    var asyncFn=async function (){
    	console.log(1)
    	var parm=await timeFn(5000);
    	console.log(parm)
    	console.log(4)
    }
    asyncFn()
    

    generator方案

    /******************generator***********************/
    var timeFn=function(time){
    	return new Promise(function(resolve,reject){
    		setTimeout(function(){
    			console.log(2)
                resolve(3);
    		},time)
    	})	
    }
    
    
    var genFn=function * (){
    	console.log(1)
    	var parm=yield timeFn(5000);
    	console.log(parm)
    	console.log(4)
    }
    asyncFn()
    

    promise方案

    /******************promise***********************/
    var timeFn=function(time){
    	return new Promise(function(resolve,reject){
    		setTimeout(function(){
    			console.log(2)
                resolve(3);
    		},time)
    	})	
    }
    
    
    
    console.log(1)
    timeFn(5000).then(function(parm){
    	console.log(parm)
    	console.log(4)
    })
    

    产品的需求

    工作中的异步实用场景

    ended 是音频播放完毕事件 btnText 是按钮文案

    使用knockout库

            self.timer = ko.observable(3);
            self.focusChoice.subscribe((newVal)=>{
                if (newVal == '单词') {
                    self.timer(3)
                } else {
                    self.timer(5)
                }
            })
            self.btnText = ko.observable(`提交`)
            self.disabled = ko.observable(false);
            self.ended = async ()=> {
                console.log(1)
                self.btnText(`${self.timer()}秒后可以提交`)
                console.log(2)
                await self.promiseTime();
                console.log(3)
                self.btnText('提交')
                console.log(4)
            }
            
            self.promiseTime = ()=> {
                return new Promise((resolve)=> {
                    setTimeout(() => {
                        self.disabled(true);
                        resolve();
                    }, self.timer() * 1000)
                })
            }
               
    

    gif

  • 相关阅读:
    如何运用领域驱动设计
    如何运用领域驱动设计
    linq Select与SelectMany的区别
    linq GroupBy 多字段分组
    Enumerable<T>的GroupJoin 方法和Join的用法和区别
    使用vscode搭建vue开发环境
    C# Windows服务发布生成步骤
    C#使用表驱动算法实现多层if或者switch语句重构
    记一次服务器重启后应用程序启动出错
    项目中的NLog日志记录
  • 原文地址:https://www.cnblogs.com/leee/p/7096119.html
Copyright © 2011-2022 走看看