Javascript 从承诺返回值(然后)
我很难从承诺中返回一些价值观 这是我的代码:Javascript 从承诺返回值(然后),javascript,reactjs,promise,Javascript,Reactjs,Promise,我很难从承诺中返回一些价值观 这是我的代码: getInitialState: function() { var me = this; var promise = me.getChosenProtocols(); return (promise.then(function(value) { var ChosenProtocols = Object.keys(value).map(key => value[key]); return ({ showModal:
getInitialState: function() {
var me = this;
var promise = me.getChosenProtocols();
return (promise.then(function(value) {
var ChosenProtocols = Object.keys(value).map(key => value[key]);
return ({
showModal: (ChosenProtocols.length == 0) ? true : false,
SelectedProtocols: ChosenProtocols,
nmTitle: SE.t(218997)
});
}, function (value) {
return({
showModal: true,
SelectedProtocols: [],
nmTitle: SE.t(218997)
});
}));
},
所以发生的事情是,getChosenProtocols返回一个已解决的承诺,我正试图从中返回值。任何帮助都将不胜感激 谢谢大家,当我把它改成这样时,它起了作用:
getInitialState: function() {
var me = this;
return ({
showModal: false,
SelectedProtocols: [],
nmTitle: SE.t(218997)
});
},
componentWillMount: function() {
var me = this;
var promise = me.getChosenProtocols();
promise.then(function(value) {
var selectedProtocols = Object.keys(value).map(key => value[key]);
me.setState({
showModal: (selectedProtocols.length == 0 ) ? true : false,
SelectedProtocols: selectedProtocols
})
});
},
您不应该在
getInitialState
中执行异步操作,您可以在componentWillMount或componentDidMount中执行setState
。除此之外,我强烈建议使用ES6类
getInitialState: function() {
return {chosenProtocols: {}};
},
componentDidMount: function() {
var protocolsPromise = this.getChosenProtocols();
protocolsPromise.then((value) => {
var chosenProtocols = Object.keys(value).map(key => value[key]);
this.setState({chosenProtocols: chosenProtocols});
})
}
ES6版本
class ComponentName extends React.Component {
constructor(props) {
super(props);
this.getChosenProtocols = this.getChosenProtocols(bind);
this.state = {chosenProtocols: {}};
}
componentWillUnmount() {
var protocolsPromise = this.getChosenProtocols();
protocolsPromise.then((value) => {
var chosenProtocols = Object.keys(value).map(key => value[key]);
this.setState({chosenProtocols: chosenProtocols});
});
}
getChosenProtocols() {
// Returns a promise
}
}
您不应该在
getInitialState
中执行异步操作,您可以在componentWillMount或componentDidMount中执行setState
。除此之外,我强烈建议使用ES6类
getInitialState: function() {
return {chosenProtocols: {}};
},
componentDidMount: function() {
var protocolsPromise = this.getChosenProtocols();
protocolsPromise.then((value) => {
var chosenProtocols = Object.keys(value).map(key => value[key]);
this.setState({chosenProtocols: chosenProtocols});
})
}
ES6版本
class ComponentName extends React.Component {
constructor(props) {
super(props);
this.getChosenProtocols = this.getChosenProtocols(bind);
this.state = {chosenProtocols: {}};
}
componentWillUnmount() {
var protocolsPromise = this.getChosenProtocols();
protocolsPromise.then((value) => {
var chosenProtocols = Object.keys(value).map(key => value[key]);
this.setState({chosenProtocols: chosenProtocols});
});
}
getChosenProtocols() {
// Returns a promise
}
}
你所做的承诺看起来基本上是正确的。问题似乎在于您希望将承诺的值返回到哪里。看起来您希望基于承诺在React组件中设置初始值。如果是这种情况,请创建一个函数来返回承诺中的值,然后将变量设置为该函数的输出。也就是说,在
setInitialState
中执行此操作不是推荐的位置<代码>组件将挂载或组件挂载
更合适
如果me.getChosenProtocals
正在返回已解析的承诺,则提供给then()
的第一个函数将把承诺返回的值作为变量值传递给它
大致如下:
getInitialState: function() {
return(
SelectedProtocols: null
)
}
componentWillMount: function() {
const me = this;
me.getChosenProtocols = new Promise((resolve, reject) => {
setTimeout(function(){
resolve("Success!");
}, 250);
});
me.getChosenProtocols.then(function(value) {
var selectedProtocols = Object.keys(value).map(key => value[key]);
me.setState({
SelectedProtocols: selectedProtocols
})
})
}
你所做的承诺看起来基本上是正确的。问题似乎在于您希望将承诺的值返回到哪里。看起来您希望基于承诺在React组件中设置初始值。如果是这种情况,请创建一个函数来返回承诺中的值,然后将变量设置为该函数的输出。也就是说,在setInitialState
中执行此操作不是推荐的位置<代码>组件将挂载
或组件挂载
更合适
如果me.getChosenProtocals
正在返回已解析的承诺,则提供给then()
的第一个函数将把承诺返回的值作为变量值传递给它
大致如下:
getInitialState: function() {
return(
SelectedProtocols: null
)
}
componentWillMount: function() {
const me = this;
me.getChosenProtocols = new Promise((resolve, reject) => {
setTimeout(function(){
resolve("Success!");
}, 250);
});
me.getChosenProtocols.then(function(value) {
var selectedProtocols = Object.keys(value).map(key => value[key]);
me.setState({
SelectedProtocols: selectedProtocols
})
})
}
您希望将承诺中的值返回到哪里?进入变量?是的,进入SelectedProtocols,这是一种状态。我想将承诺结果设置为SelectedProtocols状态。您想将承诺中的值返回到哪里?进入变量?是的,进入SelectedProtocols,这是一种状态。我想将承诺结果设置为SelectedProtocols状态。我会将其更改为componentWillMount,无论如何,我该怎么做?我更新了答案,请检查。您也可以查看此链接谢谢您的帮助,非常感谢我将其更改为componentWillMount,不管怎样,我可以怎么做?我更新了我的答案,请检查。您也可以查看此链接谢谢您的帮助,非常感谢。谢谢,它按照您的建议设置了内部状态。谢谢,它按照您的建议设置了内部状态。