从函数返回变量和承诺

时间:2019-08-04 05:44:48

标签: javascript

考虑以下使用回调编写的函数。它返回一个令牌并异步执行一个方法。

var token = 1;
function requestSupport(callback) {
  setTimeout(() => {
    console.log(token + ":How may I help you?");
    callback(); //when executive is available
  }, 5000);
  return ++token; //instantly give the token number
}

回调的简便之处在于该函数能够(立即)返回令牌号,并且还可以异步执行代码并在有帮助时发出通知。尝试使用Promises重写时,此函数应该是什么样? 问题:如果一个函数返回一个Promise,则用户将不会获得令牌号,因为一个函数可以返回一件事。

1 个答案:

答案 0 :(得分:4)

您想同时返回令牌和Promise-您可以使用所需的任何数据结构(也许是对象)来完成此操作:

var token = 1;
function requestSupportProm() {
  const prom = new Promise((resolve) => {
    setTimeout(() => {
      console.log(token + ":How may I help you?");
      resolve(); //when executive is available
    }, 2000);
  });
  return {
    prom,
    token: ++token
  };
}

(() => {
  // later;
  const { prom, token } = requestSupportProm();
  console.log('Got token:', token);
  prom.then(() => {
    console.log('Promise resolved');
  });
})();

也可以使用数组,例如return [prom, ++token],但是具有命名属性的对象一目了然可能更容易理解。