2017-04-06 54 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