关于defer.promise.then 异步的一个疑问

疑问:感觉会报错,因为执行到defer.promise.then这时候还没到defer.resolve,因为异步读文件,总归会慢

解答:先执行defer.promise.then,是给callback赋值,函数的赋值会比较抽象,callback得到函数的赋值后,是函数就该等待执行,等待resolve的时候,执行,其实也是回调的方式,

关键点:实参是函数,就是形参被复值成函数,把形参当函数看

var Defer = function(){
    var value,callback;
    return {
        resolve :function(val){
            value = val;
            callback(val);
        },
        promise:{
            then:function(fn){
                callback = fn;
            }
        }
    }
}

var fs = require(‘fs‘);
var defer = new Defer();
fs.readFile(‘data/account/accountInfo_0.html‘,(err,data)=>{
    console.log(2)
    defer.resolve(data)
})
console.log(1)
defer.promise.then(function(resData){
    console.log(3)
    console.log(resData)
});
时间: 2024-10-19 10:17:42

关于defer.promise.then 异步的一个疑问的相关文章

浅谈Angular的 $q, defer, promise

1. $q $q是Angular的一种内置服务,它可以使你异步地执行函数,并且当函数执行完成时它允许你使用函数的返回值(或异常). 2. defer defer的字面意思是延迟,$q.defer() 可以创建一个deferred实例(延迟对象实例). deferred 实例旨在暴露派生的Promise 实例,以及被用来作为成功完成或未成功完成的信号API,以及当前任务的状态.这听起来好复杂的样子,总结$q, defer, promise三者之间的关系如下所示. var deferred = $q

深入理解Promise并写一个符合Promise a+规范的Promise代码

关于Promise函数可以参考我写的这篇文章https://www.cnblogs.com/qiaohong/p/7705262.html,我们现在就深入理解一下这个函数. 首先说下Promise方法,Promise方法中还是有些是比较好用的,比如说Promise.all()方法(Promise.all()方法的参数是一个数组,会按照数组的结果放到成功的回调里,如果有一个错误那么就不会成功).Promise.race()方法(这个方法的参数也是一个数组,Promise.race()会同时发起并发

ECMAScript prototype的一个疑问。

既然是疑问 当然首先要贴一段代码. 背景: 探究js的原型继承模式. 疑惑:为何person1和person2的prototype 居然是相等的. 附: 1.Object.create(proto, [ propertiesObject ]) 参数 proto 一个对象,作为新创建对象的原型.或者为 null. propertiesObject 可选.该参数对象是一组属性与值,该对象的属性名称将是新创建的对象的属性名称,值是属性描述符(这些属性描述符的结构与Object.defineProper

C#中关于静态与非静态的一个疑问

关于静态方法.变量和非静态方法.变量的区别,园里的大神早就有了许多详细的总结,个人觉得静态方法.变量与非静态方法.变量的区别可以总结为以下两句话: 静态的是属于类的 非静态是属于对象的 就是说调用静态方法和变量时可以直接使用ClassName.StaticMethod():调用非静态方法和变量只能先创建一个类的实例ClassName instance = new CalssName();,之后再进行调用instance.Method(); 但是很多人所说的静态方法只能访问类中的静态方法和变量,自

关于Binder Thread的一个疑问

============问题描述============ 最近在一本书上看到这样一句话"一个Binder服务端实际上就是一个Binder类的对象,该对象一旦创建,内部就启动一个隐藏线程.该线程接下来会接收Binder驱动发送的消息." 我有以下2个疑问: 1:这个隐藏线程是在什么地方被创建的? 2:android中的系统服务也是从Binder派生的,那么这些系统服务也都有一个隐藏线程吗 请高手指教,谢谢. ============解决方案1============ 1.在后台创建的 2

对SSL一个疑问的新理解

看了很多关于Https/SSL的介绍,关于数字证书部分,我一直有个疑问:如果数字证书文件被别人拿到,那是不是就可以进行通讯了呢?如果这样,那整个安全机制就完全失去作用了.从开发的角度,我拿到别人的数字证书,我就可以接入到他的通讯环节中去.这让我对SSL有了一丝不信任的感觉. 刚才找到一个介绍,里面说了这样一句话,让我突然清醒, “最后回答一个非常常见的新人喜欢问的问题:如果证书泄露了呢?这么会假设,你咋不上天呢?证书就相当于用于指纹解锁的手指,你连手指都可以丢,还谈什么安全呢.” “证书这个东西

c语言关于链表中指针的运用有一个疑问

定义链表的结点结构typedef struct node{Datentyp data;struct node *next:}Node,*nodeptr:然后创建一个结点 nodeptr np,这里为什么要创建一个指针*np而不是直接创建一个Node np.如果创建nodeptr np的话,直接赋值于np,如np->data=1:由于np没有指向一个具体的地址,就会说使用了未初始化的局部变量np.那么是不是还要将np指向一个具体的变量,如Node Np:np=&Np:

同步异步的一个比方

在网上看到对同步异步的解释,觉得很形象,转载过来记一下. 同步和异步的区别 举个例子:普通B/S模式(同步)AJAX技术(异步) 同步:提交请求->等待服务器处理->处理完毕返回 这个期间客户端浏览器不能干任何事 异步: 请求通过事件触发->服务器处理(这是浏览器仍然可以作其他事情)->处理完毕 同步就是你叫我去吃饭,我听到了就和你去吃饭:如果没有听到,你就不停的叫,直到我告诉你听到了,才一起去吃饭. 异步就是你叫我,然后自己去吃饭,我得到消息后可能立即走,也可能等到下班才去吃饭.

iTunes Connect开发者指南中的一个疑问

iTunes Connect Developer Guide     避免app版本出现在iClound中,我的疑问是对已经上架的版本不能设置,那么这个功能的真正意义在哪里? 大部分用户去应用页面下载时,都会默认下载到已经处于"Ready for Sale"的版本,如果已经上架的版本发现它有问题时,该如何处理呢?似乎只能马上提交新的版本,然后加急说明情况,如果这样,在等待苹果审核和上架这段时间内,玩家依然是可以下载到有问题的版本(一般几小时在几天不等),这个功能的用处在哪里,我目前还不