我有一个问题,由于某些价值,我可能需要跳出整个诺言链,或者根据价值采取两条道路。

您如何做到最好?

这是我想跳出整个链条的第一种情况。我只想给他们留言。

      DB_WorkIssues.info().then(function (details) {
     if (details.doc_count == 0 && details.update_seq == 0) {
        showMsg("This device has no local data on it and no access to the Server, please come back when you are online.")
     }  jump out here, no need to do the next set.
     else
     return;     Continue on as the values are valid.
      }).then(function () {
     return ajaxCallForJson(URI_LookupTables);
      }).then(function (json) {
     return callBulkDocLoad(DB_LookupTables, json);
      }).then(function () {
     return loadCategoriesDDL();
      }).then(function () {
     return loadEquipmentDDL();
      }).catch(function (err) {
     showMsg("Error in defineDBs: " + err);
      });


在第二种情况下,如果值是一回事,我可能要走一条路,如果值是另一回事,我可能要走另一条路。但是我仍然希望连锁店能够实现第一个承诺。像这样:

      DB_WorkIssues.info().then(function (details) {
     if (details.doc_count == 0 && details.update_seq == 0) {

     Take this path.
          return;
          }).then(function () {
         return ajaxCallForJson(URI_LookupTables);
          }).then(function (json) {
         return callBulkDocLoad(DB_LookupTables, json);
          }).catch(function (err) {
         showMsg("Error in defineDBs: " + err);
          });

     }
     else
     {

     Take this path instead

         return;
          }).then(function () {
         return loadCategoriesDDL();
          }).then(function () {
         return loadEquipmentDDL();
          }).catch(function (err) {
         showMsg("Error in defineDBs: " + err);
          });
    }


谢谢。

这是我在看完答案后一直在想的事情,在该情况下,我始终会履行第二个承诺,在某些情况下只会履行第一个承诺。

    DB_WorkIssues.info().then(function(details) {

      // promise variable , defined in conditional
      var promise;

    Would I set the promise to some default value, in case the following test fails

      if (details.doc_count == 0 && details.update_seq == 0) {
        // return this promise
        promise = ajaxCallForJson(URI_LookupTables).then(function(json) {
          return callBulkDocLoad(DB_LookupTables, json);
        });

      }
      return promise;

    }).then(function () {
       return loadCategoriesDDL();
    }).then(function () {
       return loadEquipmentDDL();
    }).then(function () {
       return loadLocationsDDL();
    }).catch(function (err) {
       showMsg("Error in defineDBs: " + err);
    });


那是我能做到的吗?

谢谢。

最佳答案

我认为这是代表您要去的骨架。承诺非常强大,值得研究。我试图添加有用的注释,但我建议您玩转代码并了解发生了什么。



// Six named promise-creators. When called with (x), will create a promise
// which waits 200ms and then logs and resolves with (x).
// These could represent any asynchronous operation.
const p1 = p2 = p3 = p4 = p5 = p6 =
  (x) => {
    const p = new Promise((resolve, reject) => {
      setTimeout(() => {resolve(x); console.log(x)}, 200)
  });
  return p;
}

// A function which, when called, will execute first promise chain.
const first_steps = () =>
  p1(1)
    .then(result => p2(2))
    .then(result => p3(3))

// A function which, when called, will execute second promise chain.
const second_steps = () =>
  p4(4)
    .then(result => p5(5))
    .then(result => p6(6))

// When true, this prints numbers 1-6.
// When false, only prints numbers 4-6.
if (false) {
 console.log(first_steps().then(second_steps));
} else {
 second_steps();
}

关于javascript - 跳出 promise 链或走另一条路,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/43381258/

10-10 11:48