需求:多个异步处理需要按顺序执行
在实际业务中,我们经常会有这样的需求。
我们需要让几个异步处理,按顺序执行。
Javascript的特性:不等待的执行特点
console.log("1番目");
// 1秒後に実行する処理
setTimeout(() => {
console.log("2番目(1秒後に実行)");
}, 1000);
console.log("3番目");
执行结果如下(大家看到了,执行的结果并没有按顺序执行)
1番目
3番目
2番目(1秒後に実行)
那如果我们需要按顺序执行呢?就可以使用到Promise对象。
关于JavaScript的Promise对象
Promise对象可以理解为一次异步操作的执行,使用promise对象之后可以使用一种链式调用的方式来组织代码;
让代码更加的直观。
Promise对象的三种状态
使用Promise对象来保证执行顺序
console.log("1番目");
// お約束を取り付けたい処理にPromise
new Promise((resolve) => {
//1秒後に実行する処理
setTimeout(() => {
console.log("2番目(1秒後に実行)");
//無事処理が終わったことを伝える
resolve();
}, 1000);
}).then(() => {
// 処理が無事終わったことを受けとって実行される処理
console.log("3番目");
});
执行结果如下
1番目
2番目(1秒後に実行)
3番目
使用Promise对象写的代码,一般就是下面的格式。
使用Promise对象,在Promise中调用Apex方法
具体代码如下。
callAction2: function(cmp, apiName, param) {
console.log("CallAPI2----------->");
return new Promise($A.getCallback(function(resolve, reject) {
var action = cmp.get("c.makeAPICall");
// レスポンスの処理
action.setCallback(this, function(response) {
const state = response.getState();
if (state == 'SUCCESS') {
resolve(response.getReturnValue());
}
else {
reject(response.getError());
}
});
$A.enqueueAction(action);
}));
},
学习视频
https://www.bilibili.com/video/BV1cN411b7do
参考链接
【Using JavaScript Promises】
https://developer.salesforce.com/docs/atlas.en-us.lightning.meta/lightning/js_promises.htm
【ES6】 JavaScript初心者でもわかるPromise講座
https://qiita.com/cheez921/items/41b744e4e002b966391a
Promise作用以及基本使用
https://juejin.cn/post/6844903693658259464
JavaScript Promise
https://www.runoob.com/js/js-promise.html
ECMAScript 2015 特性
https://www.babeljs.cn/docs/learn#ecmascript-2015-%E7%89%B9%E6%80%A7
理解JavaScript Promise