Javascript 为什么我会得到;未兑现的(承诺中的)“;那你错了吗?
所以我有一系列的Javascript 为什么我会得到;未兑现的(承诺中的)“;那你错了吗?,javascript,asynchronous,promise,Javascript,Asynchronous,Promise,所以我有一系列的,然后: ngOnInit(){ this.contentfulService.getExamples() .然后(展品=>此。展品=展品) .then(expensions=>{console.log(“0”,expensions[0])) .then(附件=>{console.log(“1”,附件[1])); }您没有从第一个返回任何内容。然后将返回到第二个,因此展品将不存在于第二个中。然后(第三个也不存在) 您应该先从返回它,然后再从返回,或者从this.expensio
,然后:
ngOnInit(){
this.contentfulService.getExamples()
.然后(展品=>此。展品=展品)
.then(expensions=>{console.log(“0”,expensions[0]))
.then(附件=>{console.log(“1”,附件[1]));
}
您没有从第一个返回任何内容。然后将返回到第二个,因此展品将不存在于第二个中。然后(第三个也不存在)
您应该先从返回它,然后再从返回,或者从this.expensions
记录它
大概是这样的:
ngOnInit() {
this.contentfulService.getExhibits()
.then(exhibits => {
this.exhibits = exhibits
return exhibits
})
.then(exhibits => {
console.log("0", exhibits[0])
return exhibits
})
.then(exhibits => {
console.log("1", exhibits[1])
});
}
或者更好
ngOnInit() {
this.contentfulService.getExhibits()
.then(exhibits => this.exhibits = exhibits)
.then(exhibits => console.log("0", this.exhibits[0]))
.then(exhibits => console.log("1", this.exhibits[1]));
}
这里有几个问题:
您已分配this.exhies=exhies
,但未返回任何内容。因此,在下一个.then()
中,无法访问展品
,从而导致问题。您可以按如下方式返回:
.then(exhibits => {
this.exhibits = exhibits
return exhibits
})
虽然这可能不需要,因为您没有在任何地方使用this.expensions
。因此,您只需返回展品
,如下所示:
.then(exhibits => exhibits)
虽然这也是不必要的,您可以简单地将其删除,然后访问展品
阵列,如:
this.contentfulService.getExhibits()
.then(exhibits => {
if(exhibits && exhibits.length){
console.log("0", exhibits[0] || {})
console.log("1", exhibits[1] || {})
}
})
或者,如果您在其他地方使用this.expensions
,则可以使用:
this.contentfulService.getExhibits()
.then(exhibits => {
this.exhibits = exhibits
return exhibits
})
.then(exhibits => {
if (exhibits && exhibits.length) {
console.log("0", exhibits[0] || {})
console.log("1", exhibits[1] || {})
}
})
此外,在进行ajax调用时,始终使用正确的错误处理,即捕获
,这对于完成新操作非常有用,即使在ajax调用在链中失败之后,也很有用,如:
this.contentfulService.getExhibits()
.then(exhibits => {
this.exhibits = exhibits
return exhibits
})
.then(exhibits => {
if (exhibits && exhibits.length) {
console.log("0", exhibits[0] || {})
console.log("1", exhibits[1] || {})
}
}).catch((error) => {
console.error("Error: " + error);
})
需要在then函数中返回值,以使其在下次回调中可用。