javascript - 如何理解angularjs的Promise对象是一种异步方法?

查看:109
本文介绍了javascript - 如何理解angularjs的Promise对象是一种异步方法?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

问 题

没搞明白,求解,我一直以为是同步的。。

解决方案

对象是一种异步方法

这种说法,本身是有问题的。 Promise 只是工具,只能说形式上是回调,形式上是异步(确定的同步环境,不用 return 而用 callback 找虐的人应该没有吧),执行是到底是不是异步,不一定的。

我们把异步与异步形式分开来说。

一般说的异步是指有上下文切换的场景,比较 setTimeout ,就是很典型的,可以简单理解为,代码执行到这里之后,就切换到其它地方了,然后后面某个时刻,又可能切换回来。(细节一两句话讲不清楚,流程上是这样)

异步形式一般来说,就是回调,从形式上来看,这就是异步与同步的区别,同步的函数,是 return ,异步的函数,需要传递一个 callbackPromise 之类的语法糖就不说了),然后在函数里显式调用 callback 作用返回。

比如一个函数,同步形式:

function syncFunc(){
    return "Hello";
}

异步形式:

function asyncFunc(callback) {
    callback("Hello");
}

这很容易理解吧。

注意,我们上面说的,异步形式,重点是形式,与真正的是不是异步的流程,实际上是没有必然联系的。比如上面的代码例子, syncFuncasyncFunc 只是形式上不同,但是,这两个函数都不涉及上下文切换,所以,这里没有真正的异步的。

function realAsyncFunc(callback) {
    setTimeout(function(){callback('Hello')}, 10 * 1000)
}

这是真正的异步函数了,因为:

realAsyncFunc(aFunc);

这样调用之后,代码会继续执行,等到 10 秒之后,又切回来执行回调函数。

反正,重点是理解 上下文 这个概念。(跟 this 的那个 context 指的不是一个东西,别搞混了),不理解的话,就多从形式上去看吧。

回到 Promise ,这套 API 形式上是回调的,所以,我们可以说它形式上异步的,但是实际执行是到底是不是异步,这个不一定,看你用在什么地方啦。(与前面的 asyncFunc一个道理)

这篇关于javascript - 如何理解angularjs的Promise对象是一种异步方法?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆