使用JavaScript的Promise的特性 按顺序调用Salesforce的Apex方法(异步处理)
2023年10月08日
文章浏览:389
需求:多个异步处理需要按顺序执行

在实际业务中,我们经常会有这样的需求。

我们需要让几个异步处理按顺序执行


Javascript的特性:不等待的执行特点

console.log("1番目");


// 1秒後に実行する処理
setTimeout(() => {
  console.log("2番目(1秒後に実行)");

}, 1000);

console.log("3番目");


执行结果如下(大家看到了,执行的结果并没有按顺序执行)

1番目
3番目
2番目(1秒後に実行)

那如果我们需要按顺序执行呢?就可以使用到Promise对象。


关于JavaScript的Promise对象

Promise对象可以理解为一次异步操作的执行,使用promise对象之后可以使用一种链式调用的方式来组织代码;

让代码更加的直观。


Promise对象的三种状态

  1. pending(执行中)----->初始状态
  2. Resolved(成功,又称Fulfilled)----->结束状态
  3. rejected(拒绝)----->结束状态



使用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

 https://zhuanlan.zhihu.com/p/26523836 

关注 收藏