精华内容
下载资源
问答
  • 不同函数达到同步的函数模拟 funcList是函数执行函数的队列,其中回调函数中flag=true是同步标记量 [removed] var flag = false; function funcTest(t,func){ setTimeout(function(){ (function(param){ console...
  • js es6 异步转同步

    千次阅读 2019-01-18 15:52:10
    // ES6 // 异步回调 () => {  wx.request({  url: '',  success (response) {  nextAction()  }  }) } const nextAction = () => {  // TODO ... ...// 异步转同步 const ...

    // ES6
    // 异步回调
    () => {
        wx.request({
            url: '',
              success (response) {
                nextAction()
            }
        })
    }

    const nextAction = () => {
        // TODO ...
    }

    // 异步转同步
    const request = struct => {
        return new Promise((resolve, reject) => {
            wx.request({
                ...struct,
                success (response) {
                  resolve(response)
                }
                  // ...
                  // reject(response)
            })
        })
    }

    request().then(response => {
        console.log(response)
    })

     

    上边部分依赖上一步数据层次多的话 会陷入回调地狱

    异步promise封装使用then链式操作转同步

    在简洁一下就是使用async await 封装

    async () => {
        const data = await request({
            url: '',
              data: {}
        })
        
        console.log(data)
    }

    这样就可以写同步代码

    展开全文
  • js异步转同步代码实现

    千次阅读 2020-02-10 16:27:27
    正常情况下同时执行几个异步任务是时,...如果有需要将异步任务同步处理的话,下面的代码可作为参考: function DB_operate(fn=null){ var obj={ that:this, data:[],//队列函数 is_operate:false, seted...

    正常情况下同时执行几个异步任务是时,程序执行的顺序并不是按照平常那样自上而下执行的。
    在这里插入图片描述
    如果有需要将异步任务转成同步处理的话,下面的代码可作为参考:

    function DB_operate(fn=null){
        var obj={
            that:this,
            data:[],//队列函数
            is_operate:false,
            seted:'',
            time:500,//执行速度
            sets:function(){
                console.log(this);//obj
                var that=this;
                this.seted=setInterval(function(){
                    // console.log(that);//window
                    if(that.is_operate){
                        return;
                    }else{
                        if(that.data.length==0){
                            console.log("当前没有可执行任务");
                            that.is_operate=false;
                            return;
                        }else{
                            console.log(that.data);
                            that.is_operate=true;
                            console.log("开始执行新任务");
                            that.data.splice(0,1)[0]();//执行期间不能再被执行,需要返回true,让异步变同步
                            console.log("剩余任务数 "+that.data.length);
                        }
                        
                    }
                },that.time);
            },
            add:function(fn){//追加任务
                this.data.push(fn);
                console.log("新增任务");
            },
            pause:function(){//暂停
                clearInterval(this.seted);
                this.is_operate=false;
                console.log("已停止");
            },
            start_:function(){//开始
                this.sets();
                this.is_operate=false;
                console.log("启动成功");
            }
        }
        return obj;
    }
    

    使用方法如下:

    var DB=new DB_operate();
    DB.add(function(){
        setTimeout(function(){
            console.log(123)
            DB.is_operate=false;//完成任务已完成
        },2000);
    });
    DB.add(function(){
        setTimeout(function(){
            console.log(456)
            DB.is_operate=false;//完成任务已完成
        },1000);
    });
    DB.add(function(){
        setTimeout(function(){
            console.log(789)
            DB.is_operate=false;//完成任务已完成
        },1500);
    });
    DB.start_();
    

    代码效果如图:
    在这里插入图片描述
    一旦把异步任务转换成同步的话,程序所需要的执行时间就会边长。而且本程序还没有出错就自动重启功能,需要手动设置。如果执行任务过程中,产生死循环等问题,排查起来也较为繁琐。如果路过的大佬有较好的解决办法可以在评论区留言。
    欢迎大家留言!

    展开全文
  • js 异步转同步

    2020-11-09 19:09:07
    在项目中有些逻辑或者请求依赖另一个异步请求,大家常用的方法是回调函数。现在有个高大上的解决方案:await async 。 async 是“异步”的简写,而 await 可以认为是 async wait 的简写。所以应该很好理解 async ...

    在项目中有些逻辑或者请求依赖另一个异步请求,大家常用的方法是回调函数。现在有个高大上的解决方案:await async 。

    async 是“异步”的简写,而 await 可以认为是 async wait 的简写。所以应该很好理解 async 用于申明一个 function 是异步的,而 await 用于等待一个异步方法执行完成。并且await 只能出现在 async 函数中,否则会报错。

    async作用:

    当调用一个 async 函数时,会返回一个 Promise 对象。当这个 async 函数返回一个值时,Promise 的 resolve 方法会负责传递这个值;当 async 函数抛出异常时,Promise 的 reject 方法也会传递这个异常值。

    async 函数中可能会有 await 表达式,这会使 async 函数暂停执行,等待 Promise  的结果出来,然后恢复async函数的执行并返回解析值(resolved)。

    await作用:

    await 表达式会暂停当前 async function 的执行,等待 Promise 处理完成。若 Promise 正常处理(fulfilled),其回调的resolve函数参数作为 await 表达式的值,继续执行 async function

    若 Promise 处理异常(rejected),await 表达式会把 Promise 的异常原因抛出。另外,如果 await 操作符后的表达式的值不是一个 Promise,则返回该值本身。

    来个栗子:

    function resolveAfter2Seconds() {
            return new Promise(resolve => {
              setTimeout(() => {
                resolve('resolved');
              }, 2000);
            });
          }
    
          async function asyncCall() {
            console.log('calling1');
            var result = await resolveAfter2Seconds();
            console.log(result);
            console.log('calling2');
            // expected output: 'calling1','resolved','calling2'
          }
    
          asyncCall();

    结合实际:

    function getData() {
            return  axios.get('/url')
          }
          async function asyncCall() {
            var {data} = await getData();
            console.log(data)
          }
          asyncCall();

    需要注意的:

    function getData1() {
            console.log(new Date())
            return new Promise(resolve => {
              setTimeout(() => {
                resolve('resolved');
              }, 2000);
            });
          }
          function getData2() {
            console.log(new Date())
            return new Promise(resolve => {
              setTimeout(() => {
                resolve('resolved2');
              }, 2000);
            });
          }
          async function asyncCall() {
            var data1 = await getData1();
            var data2 = await getData2();
            console.log(data1)
            console.log(data2)
          }
          asyncCall();

    结果:

    Mon Apr 29 2019 14:42:14 GMT+0800 (中国标准时间)
     Mon Apr 29 2019 14:42:16 GMT+0800 (中国标准时间)
     resolved
     resolved2

    可以看出 getData2 在 getData1执行完后才执行,如果getData2不依赖getData1的返回值,会造成时间的浪费。可以改成下面这样:

    function getData1() {
            console.log(new Date())
            return new Promise(resolve => {
              setTimeout(() => {
                resolve('resolved');
              }, 2000);
            });
          }
          function getData2() {
            console.log(new Date())
            return new Promise(resolve => {
              setTimeout(() => {
                resolve('resolved2');
              }, 2000);
            });
          }
          async function asyncCall() {
            var data1 =  getData1();
            var data2 =  getData2();
            data1 = await data1
            data2 = await data2
            console.log(data1)
            console.log(data2)
          }
          asyncCall();

    结果:

    Mon Apr 29 2019 14:51:52 GMT+0800 (中国标准时间)
    Mon Apr 29 2019 14:51:52 GMT+0800 (中国标准时间)

    resolved
    resolved2

    展开全文
  • javascript中,比如我们在请求数据的时候,举个例子,查询所有的文章列表, 接着拿到文章列表再去查询文章详情.这是两个请求,但是查询文章详情必然要拿到该... 这就是异步操作的同步化, 以下是解决方案: 若查询文...

        在javascript中,比如我们在请求数据的时候,举个例子,查询所有的文章列表, 接着拿到文章列表再去查询文章详情.这是两个请求,但是查询文章详情必然要拿到该文章的id,也就是查询文章详情的接口,需要在查询文章列表后来执行,否则就会拿不到文章的id.那如何保证先查询文章列表,再查文章详情呢????

         这就是异步操作的同步化, 以下是解决方案:

                若查询文章列表的函数是findAll()

                查询文章详情的函数是findById()

         1. 回调函数嵌套     

       
    
           findAll().then((res)=>{
                
                findById()
    
            })

              这种方式如果是简单的业务逻辑可以这样使用,但是若是逻辑复杂就需要多层回调,也就是所谓的回调噩梦,所以不是特别可取


          2.Promise...then方式
             promise的流程如下图所示:

    Promise一旦新建就立刻执行, 此时的状态是Pending(进行中),它接受两个参数分别是resolve和reject.它们是两个函数.
    resolve函数的作用是将Promise对象的状态从'未完成'变为'成功'(由Pending变为Resolved), 在异步操作成功时,将操作结果作为参数传递出去;
    reject函数的作用是将Promise对象的状态从'未完成'变为失败(由Pending变为Rejected),在异步操作失败时调用,并将异步操作的错误作为参数传递出去.

    <script type="text/javascript">
    		function foo(){
    			    return new Promise((reslove,reject)=>{
    			    	findAll().then(()=>{
    			    		 reslove();
    			    		}).catch(()=>{
    			    			reject();
    			    		})
    			    })
    			}
    		foo.then((reslove)=>{
    			findById()
    		})
    	</script>

     3.generator函数  /  async函数

       具体用法,见上一篇

    链接https://blog.csdn.net/rolinabc/article/details/103902759

    展开全文
  • 主要介绍了Node.js模拟发起http请求从异步转同步的5种方法,下面总结了几个常见的库 API 从异步转同步的几种方法。需要的朋友可以参考下
  • 异步: Initial() { this.testdata1(); this.testdata2(); }, testdata1() { console.log("testdata1"); }, testdata2() { setTimeout(() => { console.log("testdata2"); }, 2000); }, 同步
  • js异步方法转同步—将promise转为同步
  • JS 异步调用 同步调用。

    千次阅读 2019-11-17 16:06:38
    //同步调用最大等待时间。 //同步请求数据---->会导致浏览器被锁死。慎用!!!! function JSONPSync(url){ var dataWaiting = null; AjaxScriptLoad(url,function(data){ if(data == null) ...
  • js 异步改成同步

    千次阅读 2019-10-22 14:50:06
    1.回调方式 export const getUserToken = (cb) => { ...async function(){ //注意`await`外层函数需要有`data `标识,表示里面是异步 const data = await getUserToken() console.log(data ) }
  • 怎样用JS实现异步转同步

    千次阅读 2015-10-13 17:05:20
    //任何同步调用都必须位于一个sync.block块内, sync.block描述可以嵌套。 sync.block(function() { //标准异步调用方式 Some_Async_Function(123, function(ta) { //这里参数ta的值是124 }); //这是同步调用...
  • JS里如何将多个异步调用转同步调用

    千次阅读 2020-11-23 17:21:33
    本文介绍如何在js里将多个异步调用优雅地转同步调用,可适用于vue, node.js等编程
  • js异步同步小技巧-递归

    万次阅读 2017-05-22 17:00:02
    在写js的时候,很多时候都会遇到异步转同步的问题。比如:从服务器端返回一个集合数据,在遍历集合的时候,又要异步去请求别的数据,但是for循环必须在同步的情况下执行。这时候,怎么办?解决这种问题的办法可能会...
  • 首先问问自己当面试官问到js中的同步异步,这个问题该怎么回答?理解一个问题无非是what-why-how js同步异步问题是什么–>为什么会产生异步问题–>如何解决。 一、JavaScript起源 技术的出现,和应用场景密切...
  • 今天小编就为大家分享一篇关于Nodejs让异步变成同步的方法,小编觉得内容挺不错的,现在分享给大家,具有很好的参考价值,需要的朋友一起跟随小编来看看吧
  • ES6的异步转换同步

    2021-04-10 09:58:48
    ES6的异步转换同步 关于async/await 范例子 如何将异步代码看起来像同步代码一样 第一种方式 const delayer = t => new Promise(resolve => setTimeout(resolve, t)) async function timestast() { console....
  • Javascript语言的执行环境是"单线程",而Javascript语言将任务的执行模式分成两种:同步(Synchronous)和异步(Asynchronous) 首先得意识到一个问题 何为异步编程?何为同步编程? 直接上网上的优秀文章: ...
  • JS 同步转异步之Promise

    2020-05-27 10:27:44
    同步方法在promise示例中变成异步执行: [url=][/url] console.log(1);let p =newPromise(resolve => {console.log(2);resolve();console.log(3);...由此,利用Promise实现同步转异步函数: [url=]...
  • 非主流node.js异步转同步

    万次阅读 2015-03-04 09:54:39
    异步转同步方案分类 说起nodejs的异步转同步,估计大家不陌生。因为nodejs回调实在太多了,稍微复杂一点的程序就会有很多层的回调嵌套。为了处理这些令人抓狂的回调,我们一般需要使用一些框架或工具将这些异步...
  • nodejs异步同步的几种方式

    万次阅读 2019-02-18 16:48:00
    1. nodejs的async库,有好多种方法支持异步同步的,常用的有: async.each():for循环中牵涉到异步同步,经常使用。 async.waterfull(): 同步执行,function之间有数据交互,上一个function的输出,可作为下一个...
  • JS循环中异步同步

    2021-03-30 13:39:07
    循环中异步同步应用场景方式一方式二 应用场景 在前端进行大文件上传的时候,往往会采用分片上传的方式,而分片上传每一个文件块都需要发送一个请求给后端,同时每一个文件块都要等前一个文件块的请求成功之后才能...
  • 使用 Node.js 模拟发起 http 请求很常用的,但是由于 ...下面总结了几个常见的库 API 从异步转同步的几种方法。模块有: request , request-promise , request-promise-native , request-promise-any PS: Node的版本...
  • 2 同步:MyAjaxs " 要调用的方法页面 方法" 参数 function d {alert d["d"] ;} ;">调用方法:1 将下载好的Ajax js文件引用到页面 代码如下:<script src " js MyAjax js" type &...
  • js异步方法变成同步方法

    万次阅读 2019-01-23 18:56:05
    const getData = (url, param) =&gt; { return new Promise((resolve, reject) =&gt; { wx.request({ url: url, method: 'GET', data: param, success (res) { console.log(...
  • JS异步编程同步

    2020-01-14 14:27:27
    异步(async)是相对于同步(sync)而言的,由于JavaScript是单线程运行的,为了避免阻塞带来的糟糕体验,异步操作成了必不可少的一种编程模式,js实现异步操作的方式有很多,包括回调函数、时间监听、发布/订阅模式、...
  • js中的同步异步

    千次阅读 2020-01-14 07:50:00
    整篇文章主要了解js中的同步异步问题,js是一门单线程的语言,浏览器解析js代码是同步顺序执行的,但是浏览器本身是多线程的, js实现异步是通过事件循环来实现的 定时器setTimeout,setInterval本质上是浏览器提供...
  • Promise 异步转同步 .then()

    万次阅读 2018-12-20 20:50:42
    创建一个api.js export const login= function() { return new Promise(function (resolve, reject) { wx.login({ success: function (res) { resolve(res) }, fail: function (res) { ...
  • JavaScript异步函数同步方法

    万次阅读 2018-07-24 20:24:27
    在我们平时进行前端开发的时候,经常需要用到异步函数,最常见的是发送网络请求,在发送网络请求之后,在回调函数中对请求结果再进行下一步操作,下面来模拟这个操作步骤: /* * 模拟网络请求的函数 */ function ...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 137,009
精华内容 54,803
关键字:

js异步转同步