首页 > 解决方案 > 从函数返回变量和承诺

问题描述

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

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 重写时,这个函数应该是什么样子?问题:如果一个函数返回一个承诺,用户将不会获得令牌编号,因为函数可以返回一件事。

标签: javascript

解决方案


你想返回 token 和 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],但是具有命名属性的对象可能一目了然更容易理解。


推荐阅读