使用 promise

0
视频
0
完成
0%
进度
0
分钟
0
完成
0%
进度

Angular 里面有一些服务会自动返回 promise ,不需要我们自己去创建。不过有些时候,你可能想要去整合第三方的一些东西,如果你需要异步处理的功能,就需要自己手工去创建 promise ... 在上一个视频里,我已经创建了一个 Deferred 对象,在这个对象里就包含一个 promise ... 下面,我们看一下怎么去用它。

打开 app.js ,在这个 GitHubService 服务的 _login 方法里面,已经创建好了一个 Deferred 对象 ... 下面,假设我们向 Github 服务器发送了一个 http 的请求,这个请求会给我们返回来一些数据,数据里可能会包含状态的信息,用户在 Github 网站上的用户名等等 ... 这里我们可以虚拟一下,直接创建一个 data 对象,假设这个 data 对象里的内容是 Github 服务器给我们返回来的东西 ...

我们可以根据返回的 data 数据来决定下一步要做什么,可以使用 resolve 带着返回来的数据决定去做一些事情,也可以使用 reject 的方法带着一个错误信息,去处理遇到的问题。

先用一个 if 语句来判断一下 ... 条件是 data 的 status 是不是等于 ok ,如果是 ok,表示我们向 Github 服务器发出的请求得到了回应 ... 这样我们就可以使用 resolve 方法,带着这个返回来的数据去做一些事情 ... defer.resolve(data);

加上一个 else ... 如果 status 不等于 ok ,那可能是遇到问题了,我们就使用 reject ... 带着一个错误信息 ... 去处理遇到的问题。

if (data.status === 'ok') {
defer.resolve(data);
} else {
defer.reject('用户不允许使用 github 帐户');
}

下面,我们要去设计一下,当使用 resolve 决定要做的事,还有处理 reject 发过来的问题。这里我们要用的是 promise 的 then 这个方法 ... 输入 defer.promise ... 使用它的 then 方法,这个方法的第一个参数是一个函数,就是决定要做的事,它的第二个参数是处理遇到的问题的函数 ...

先添加它的第一个参数 ... 用一个匿名函数 ... 可以把 resolve 发过来的数据传递到这里 ... 比如叫它 data ... 在这个函数的里面,我们简单的在控制台上输出点东西 ... $log.info ... 输出 Hello ... 加上 data 里面的 userName 这个属性的值 ...

再去设置一下这个 then 的第二个参数,就是处理遇到的错误 ... 用一个匿名函数 ... 这个函数可以接受用 reject 发过来的东西 ... 这里叫它 error ... 然后在这个函数里面,去到控制台上输出遇到的问题 ...

这个 then 方法是可以链式使用的,也就是,你可以在这个 then 的后面继续去使用 then ...

defer.promise
.then(
function (data) {
$log.info('Hello ' + data.userName);
},
function (error) {
$log.warn(error);
}
);

保存 ... 在控制台上,你会看到 Hello ninghao ... 执行了 promise 的 then 里面的第一个参数里定义的动作 ... 因为我们决定当请求 GitHub 服务器的时候,如果返回来的数据里面,status 的值是 ok 的话,就会决定用这个返回来的数据去做一些事情。 这样也就会去执行 promise 的 then 里面的第一个参数里设计的动作。

下面, 我们把这个 data 里的 status 的值改成 not ok ... 再保存一下 ... 这样就会用 reject 发出一个错误 ... 也就会用到 promise 的 then 里面的第二个参数里设计的动作,在控制台上输出这个发过来的错误信息。

使用 promise《 AngularJS 基础 》

统计

15260
分钟
0
你学会了
0%
完成

社会化网络

关于

微信订阅号

扫描微信二维码关注宁皓网,每天进步一点