代码之家  ›  专栏  ›  技术社区  ›  apopa

返回多个值,包括承诺

  •  1
  • apopa  · 技术社区  · 8 年前
    ...
    var me = 'you';
    return aPromise();
    }).then(data => {
      // i want me here
    })
    
    function aPromise() {
      return new q.Promise((resolve, reject) => {
          resolve(iReturnAnObject());
        }, reject);
    });
    

    我想要 me 变量范围内的 then 方法如果我尝试以下操作:

    ...
    var me = 'you';
    return [aPromise(), me];
    }).then(data => {
      let promise, me;
      [promise, me] = data;
      console.log(promise); //incomplete object
    })
    

    这个 promise 变量不会包含aPromise()应该返回的整个对象,它仍处于挂起状态。

    3 回复  |  直到 8 年前
        1
  •  1
  •   Pandaiolo    8 年前

    你可以把承诺嵌套起来:

    ...
    var me = 'you';
    return aPromise().then(data => {
      // me is here
    })
    

    否则,必须包装已解析值的数组:

      ...
      var me = 'you';
      return Promise.all([aPromise(), me]);
    }).then(data => {
      let [promise, me] = data;
      // use me here
      promise.then(...)
    }) 
    
        2
  •  0
  •   Maxx    8 年前
    somePromise.then(() => {
        const me = 'you';
        return aPromise().then(aPromiseData => Promise.resolve({aPromiseData, me}))
    }).then(data => {
        const {aPromiseData, me} = data;
    })
    
        3
  •  0
  •   Brendan Quinn    8 年前

    const other = 'other var';
    const promise = new Promise(
            function(resolve, reject) {
                window.setTimeout(
                    function() {
                        // We fulfill the promise !
                        resolve('response');
                    }, 2000);
            }
        );
    
    // or
    
    promise.then(function(other, response) {
      console.log(other, response);
    }.bind(null, other))

    你能提供更多的背景吗?将另一个变量传递到resolve()中可能会更容易。