2016-07-27 4 views
-1
... 
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() должен возвращать, он все еще не завершено.

+0

Можете ли вы прояснить, какова цель того, чего вы пытаетесь достичь? ваш пример кода также неполный. – Bamieh

+0

Что делает функция aPromise() 'и что возвращается? – Maxx

+0

на самом деле, 'обещание' будет содержать именно объект' aPromise() 'возвращает, если aPromise возвращает невыполненное обещание, тогда, конечно,' обещание' остается невыполненным до тех пор, пока обещание не будет выполнено. –

ответ

1

Вы можете просто гнездо обещание:

... 
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(...) 
}) 
0
somePromise.then(() => { 
    const me = 'you'; 
    return aPromise().then(aPromiseData => Promise.resolve({aPromiseData, me})) 
}).then(data => { 
    const {aPromiseData, me} = data; 
}) 
+2

Пока этот код может ответить на вопрос, предоставляя дополнительный контекст относительно * how * и/или * почему * он решает проблему, улучшит долгосрочную ценность ответа. –

0

Если я правильно понимаю ваш вопрос, вы можете вводить var в обратный вызов успеха.

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))

Можете ли вы дать больше контекста, хотя? Может быть проще передать другую переменную в resol().

Смежные вопросы