没搞明白,求解,我一直以为是同步的。。
MDN - JavaScript标准库 - Promise
首先,Promise和angular没什么直接关系。
其次,如果是同步的话,写成Promise的形式是为了什么,闲的没事给自己找麻烦?
“对象”是一种异步方法
这种说法,本身是有问题的。 Promise 只是工具,只能说形式上是“回调”,形式上是“异步”(确定的同步环境,不用 return 而用 callback 找虐的人应该没有吧),执行是到底是不是“异步”,不一定的。
return
callback
我们把“异步”与“异步形式”分开来说。
一般说的“异步”是指有上下文切换的场景,比较 setTimeout ,就是很典型的,可以简单理解为,代码执行到这里之后,就切换到其它地方了,然后后面某个时刻,又可能切换回来。(细节一两句话讲不清楚,流程上是这样)
“异步形式”一般来说,就是“回调”,从形式上来看,这就是异步与同步的区别,同步的函数,是 return ,异步的函数,需要传递一个 callback ( Promise 之类的语法糖就不说了),然后在函数里显式调用 callback 作用“返回”。
Promise
比如一个函数,同步形式:
function syncFunc(){ return "Hello"; }
异步形式:
function asyncFunc(callback) { callback("Hello"); }
这很容易理解吧。
注意,我们上面说的,“异步形式”,重点是“形式”,与真正的是不是“异步”的流程,实际上是没有必然联系的。比如上面的代码例子, syncFunc 和 asyncFunc 只是形式上不同,但是,这两个函数都不涉及上下文切换,所以,这里没有真正的“异步”的。
syncFunc
asyncFunc
function realAsyncFunc(callback) { setTimeout(function(){callback('Hello')}, 10 * 1000) }
这是真正的异步函数了,因为:
realAsyncFunc(aFunc);
这样调用之后,代码会继续执行,等到 10 秒之后,又切回来执行回调函数。
反正,重点是理解 上下文 这个概念。(跟 this 的那个 context 指的不是一个东西,别搞混了),不理解的话,就多从形式上去看吧。
this
回到 Promise ,这套 API 形式上是“回调”的,所以,我们可以说它形式上“异步”的,但是实际执行是到底是不是异步,这个不一定,看你用在什么地方啦。(与前面的 asyncFunc一个道理)
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
暂无简介
文章 0 评论 0
接受
发布评论
评论(3)
MDN - JavaScript标准库 - Promise
首先,Promise和angular没什么直接关系。
其次,如果是同步的话,写成Promise的形式是为了什么,闲的没事给自己找麻烦?
这种说法,本身是有问题的。 Promise 只是工具,只能说形式上是“回调”,形式上是“异步”(确定的同步环境,不用
return
而用callback
找虐的人应该没有吧),执行是到底是不是“异步”,不一定的。我们把“异步”与“异步形式”分开来说。
一般说的“异步”是指有上下文切换的场景,比较 setTimeout ,就是很典型的,可以简单理解为,代码执行到这里之后,就切换到其它地方了,然后后面某个时刻,又可能切换回来。(细节一两句话讲不清楚,流程上是这样)
“异步形式”一般来说,就是“回调”,从形式上来看,这就是异步与同步的区别,同步的函数,是
return
,异步的函数,需要传递一个callback
(Promise
之类的语法糖就不说了),然后在函数里显式调用callback
作用“返回”。比如一个函数,同步形式:
异步形式:
这很容易理解吧。
注意,我们上面说的,“异步形式”,重点是“形式”,与真正的是不是“异步”的流程,实际上是没有必然联系的。比如上面的代码例子,
syncFunc
和asyncFunc
只是形式上不同,但是,这两个函数都不涉及上下文切换,所以,这里没有真正的“异步”的。这是真正的异步函数了,因为:
这样调用之后,代码会继续执行,等到 10 秒之后,又切回来执行回调函数。
反正,重点是理解 上下文 这个概念。(跟
this
的那个 context 指的不是一个东西,别搞混了),不理解的话,就多从形式上去看吧。回到 Promise ,这套 API 形式上是“回调”的,所以,我们可以说它形式上“异步”的,但是实际执行是到底是不是异步,这个不一定,看你用在什么地方啦。(与前面的
asyncFunc
一个道理)