简易promise】的更多相关文章

<!DOCTYPE html><html><head lang="en"> <meta charset="UTF-8"> <title></title> <script> /** * Created by addison on 2014/4/4. */ //简易promise (function (w) { var a = {}; a.get = function (url) { r…
概述 异步编程离不开promise, async, 事件响应这些东西,为了更好地异步编程,我打算探究一下promise的实现原理,方法是自己实现一个简易的promise. 根据promise mdn上的描述,我们主要实现如下api: Promise.prototype.resolve Promise.prototype.reject Promise.prototype.then Promise.all Promise.race 为了更好地性能和使用,我还需要加上惰性求值特性,即:只有调用then…
code 上一章中我们遇到了两个问题 1.异步调用顺序的问题 2.then返回一个promise的问题 思考 如果控制异步回调的顺序? 因为异步操的时间作我们无法控制,但是我们只需要按顺序执行回调函数就好了 也就是说 then里面的回调,我们等调用 resolve方法之后(确保异步操作完成),再来执行 操作 用一个变量nextResolve 来保存then的 回调函数 放在resolve之后调用 function MyPromise(fn) { var res = null, callback…
code 最近在思考promise的实现原理 于是准备自己写一个简单的demo 一开始想到的问题有两个 1.链式调用 2.异步顺序执行 ------------------------------------------------- 我们先声明一个异步操作的函数 来模拟异步请求 function http(url){ return new MyPromise(function(resolve,reject){ setTimeout(function(){ resolve(url); },100…
我在这里介绍了promise的原理: https://juejin.im/post/5cc54877f265da03b8585902 我在这里 仅仅张贴 我自己实现的简易promise——DiPromise(自己起的名字,嘿嘿嘿~~) PS: 这个可以在控制台执行 let count = 0 class DiPromise { constructor(executor) { // 自己维护的状态 this.state = 'PENDING' // FULFILLED or REJECTED 后的…
在之前的一篇<JavaScript实现按键精灵>中曾记录了几个事件对象,本文将会对它们进行一次实战,要完成的动作包括滚动.点击和翻页. 一.滚动 滚动是通过修改容器元素的scrollTop属性实现的,期间会进行一系列的计算,而每次滚动都会包含一个个小的偏移动作,为了让这些动作能有序进行,自定义了一个Promise,如下所示. /** * 简易Promise */ var Promise = { fns: [], then: function(fn) { this.fns.push(fn); r…
在最新的Chrome和FF中已经 实现了Promise.有了Promise我们用数行代码即可实现一个简易AMD模式的加载器 var registry = { promises: { }, resolves: { }, getDependencyPromise: function(name) { if (!this.promises[name]) { var resolves = this.resolves; this.promises[name] = new Promise(function(r…
实现之前,我们先看看Promise的调用 const src = 'https://img-ph-mirror.nosdn.127.net/sLP6rNBbQhy0OXFNYD9XIA==/799107458981776900.jpg?imageView&thumbnail=223x125&quality=100' const promise = new Promise(function (resovle, reject) { var img = document.createElemen…
实现一个简易版 Promise 在完成符合 Promise/A+ 规范的代码之前,我们可以先来实现一个简易版 Promise,因为在面试中,如果你能实现出一个简易版的 Promise 基本可以过关了. 那么我们先来搭建构建函数的大体框架 const PENDING = 'pending' const RESOLVED = 'resolved' const REJECTED = 'rejected' function MyPromise(fn) { const that = this that.s…
话不多说,直接上代码 通过ES5的模块化封装,向外暴露一个属性 (function(window){ const PENDING = 'pending'; const RESOLVED = 'fulfilled' const REJECTED = 'rejected' function MyPromise(excutor){ const self = this;   //保存Promise对象,防止异步执行时,拿不到数据和方法,必要 self.value = undefined; self.st…