2017-04-06 79 views
3

我如何從JavaScript中的then()返回值?如何使用Promise中的值異步更新AngularJS狀態

我有以下功能:

function getResult(){ 
    var promise = _myService.getAge(); 
    var getResultPromise = promise.then(function(age){ 
    return age; 
    }) 
    return getResultPromise; //How do i get the age (value) here? *see image* 
} 

或者如何將我在下面的$$狀態對象訪問的價值?

enter image description here

+2

你不...你必須返回的承諾本身,然後使用。然後從那裏你訪問它調用你的函數。除非你使用像async/await這樣的東西,而這只是發生器上的語法糖,否則不可能從承諾中獲得價值。 – m0meni

+0

你可以嘗試使用promise.all()https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Promise/all – Raj

+3

@Raj沒有意義。他沒有回覆一系列承諾。 – m0meni

回答

-2

如何:

//The simple solution, this is how to use a Promise: 
 

 
let _myService = { 
 
    getAge: function() { 
 
    return new Promise(function(resolve, reject) { 
 
     setTimeout(function() { 
 
     resolve(3) 
 
     }, 500); 
 
    }) 
 
    } 
 
}; 
 

 
function getResult() { 
 
    _myService.getAge().then(function(age) { 
 
    console.log(age); 
 
    }); 
 
} 
 

 
getResult(); 
 

 
//OR, maybe closer to OP's intended implementation, put the value in an outer state: 
 

 
let outerState = { 
 
    age: 0 
 
}; 
 

 
setTimeout(function() { 
 
    console.log(outerState) 
 
}, 450); 
 

 
let _myService2 = { 
 
    getAge: function() { 
 
    return new Promise(function(resolve, reject) { 
 
     setTimeout(function() { 
 
     resolve(8) 
 
     }, 750); 
 
    }) 
 
    } 
 
}; 
 

 
function addAgeToOuterState() { 
 
    pState = new Promise(function(resolve, reject) { 
 
    _myService2.getAge().then(function(newAge) { 
 
     outerState.age = newAge; 
 
     resolve(outerState); 
 
    }); 
 
    }); 
 

 
    pState.then(function() { 
 
    console.log(outerState); 
 
    }); 
 

 
    return pState; 
 
} 
 

 
addAgeToOuterState() 
 

 
//for fun 
 
.then(function(outer) { 
 
    console.log(outer); //state is still here 
 
});

+1

可能的(確切)重複這是模擬異步函數,以顯示承諾如何工作。這顯然不是一個下降,也是硬編碼的年齡=== 3顯然不是一個下降。 –

+2

我的壞我只是生氣無故...無論這個答案只是登錄到控制檯,並返回undefined – m0meni

+0

它將日誌3記錄到控制檯,因爲您已將它記錄到'.then'內部的控制檯,並且它返回未定義,因爲getResult不會返回任何內容。我沒有看到的是,這有助於以任何方式回答問題。 – m0meni