Javascript 一个承诺的多个消费者可以吗?

Javascript 一个承诺的多个消费者可以吗?,javascript,promise,Javascript,Promise,示例代码: const googleLoadPromise = new Promise(function (resolve, reject) { google.charts.setOnLoadCallback(function () { resolve(1); }); }); googleLoadPromise.then(function () { // consumer 1 - do something }); googleLoadProm

示例代码:

const googleLoadPromise = new Promise(function (resolve, reject) {
   google.charts.setOnLoadCallback(function () {
    resolve(1);
  });
});

googleLoadPromise.then(function () {
 // consumer 1 - do something               
});

googleLoadPromise.then(function () {
 // comsumer 2 - do something else               
});
i、 e.对于googleLoadPromise,有两个消费者。这种式样行吗?它似乎工作正常-也就是说,两个消费者都会接到电话,而且他们似乎不会给对方造成问题

此外,若这是确定的,运行消费者的顺序是否是确定的(只是出于兴趣,比任何事情都重要)

当然可以。 如果要按顺序运行两个函数,也可以这样做:

const googleLoadPromise = new Promise(function (resolve, reject) {
  google.charts.setOnLoadCallback(function () {
    resolve(1);
  });
});

googleLoadPromise
  .then(function () {
    // consumer 1 - do something
  }).then(function () {
    // comsumer 2 - do something else
});
还要记得处理拒绝和兑现你的承诺


使用
async
wait
时,承诺也变得容易多了。下面的示例更符合您编写的内容:

const googleLoadPromise = new Promise(function (resolve, reject) {
  google.charts.setOnLoadCallback(function () {
    resolve(1);
  });
});


function1 = () => {
  // consumer 1 - do something
}

function2 = () => {
  // consumer 1 - do something
}

(async function() {
  try {
    const result = await googleLoadPromise();

    function1();
    function2();
  }
  catch( error ) {
    console.error( error );
  }
}());
这种式样行吗

当然,这是承诺的主要用途

运行消费者的顺序是确定的吗(只是出于兴趣,比任何事情都重要)

是的,首先附加
的回调,然后执行
,但是我不依赖它。如果您想一个接一个地运行回调,请相应地链接它们

 // ok:
 promise
   .then(first);
 promise
   .then(second);

  // better if second depends on first:
 promise
   .then(first)
   .then(second);

它将按顺序运行这两个函数,这是正确的。目前还不清楚OP是否希望同时运行它们。我将添加一个
承诺。所有
回答。