一个有意思的面试题解答

今天在知乎上看见一个很有意思的面试题,看了下下面的评论,貌似还有很多人不会写。题目如下:

 

某个应用模块由文本框 input,以及按钮 A,按钮 B 组成。点击按钮 A,会向地址 urlA 发出一个 ajax 请求,并将返回的字符串填充到 input 中(覆盖 input 中原有的数据),点击按钮 B,会向地址 urlB 发出一个 ajax 请求,并将返回的字符串填充到 input 中(覆盖 input 中原有的数据)。


当用户依次点击按钮 A、B 的时候,预期的效果是 input 依次被 urlA、urlB 返回的数据填充,但是由于到 urlA 的请求返回比较慢,导致 urlB 返回的数据被 urlA 返回的数据覆盖了,与用户预期的顺序不一致。


请问如何设计代码,解决这个问题?



作者:欲三更
链接:https://zhuanlan.zhihu.com/p/25259283
来源:知乎
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
 
看到这个题第一反应是rxjs。但是老是用别的框架解决问题,自己觉得是一种很蛋疼的做法,下来我就给出自己的解法。
var next=(function (){ 
  var promise=Promise.resolve(); 
  return (url)=>{ 
    promise=promise.then(()=>{ 
        return fetch(url).then((res)=>{
          $('.input').val(url); 
          console.log(url);
        });
    }); 
  };
})(); 

$('.but1').click(()=>{ 
  next('url1'); 
}); 
$('.but2').click(()=>{ 
  next('url2'); 
}); 

$('.but3').click(()=>{ 
  next('url3'); 
});           

  下面是jsbin地址:http://jsbin.com/puninopobu/edit?html,js,output;

  由于没有后台,所以把ajax换成了setTimeout来作为演示

转载于:https://www.cnblogs.com/lingtong/p/6409224.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值