gpt4 book ai didi

reactjs - 在没有 this 的 fetch Promise 中调用函数

转载 作者:行者123 更新时间:2023-12-02 10:15:18 24 4
gpt4 key购买 nike

我想知道,如何才能在 fetch 中调用 Promise 中的函数?

请注意这一行:.then(json => this.processReq(json))

我必须使用this.,因为如果不使用它,它会表示processReq未定义。由于 ES6,它不应该是这样的: .then(json => processReq(json)) ??

这是我的代码(我使用 Babel ES6 和 React):

import React, { Component, PropTypes } from 'react'
import fetch from 'isomorphic-fetch'

export default class Batchprodpry extends Component {
constructor(props) {
super(props) {
.
.
.
processReq(json) {
Object.keys(json).forEach(item => {
if (item === 'error') {
Object.keys(json[item]).forEach(propry => {
alert('Conflicto! '+'\n'+
'Id: ' + JSON.stringify(json[item][propry]['propryid'])+'\n'+
'Id Operador: ' + JSON.stringify(json[item][propry]['fkempid'])+'\n'+
'Hora inicio: ' + JSON.stringify(json[item][propry]['propryhoraini'])+'\n'+
'Hora fin: ' + JSON.stringify(json[item][propry]['propryhorafin']))
})
}
})
}
.
.

postForm() {
let maq = this.state.obj['fkmaqid']
return fetch(`/scamp/index.php/batchprodpry/${maq}`, {
method: 'POST',
credentials: 'same-origin',
headers: {
'Accept': 'application/json',
'Content-Type': 'application/json'
},
body: JSON.stringify(this.state.a)
})
.then(req => {
if (req.status >= 400) {
throw new Error("Bad response from server")
}
return req.json()
})
.then(json => this.processReq(json))
.catch(function(error) {
console.log('request failed', error)
})
}

最佳答案

没有。

使用 ES6 fat-arrow function意味着 this 绑定(bind)到当前函数体之外的其他内容。

如果您使用 ES5 语法来表达类似的函数,this 将绑定(bind)到函数体,而 this.processReq 将是未定义的:

function (json) {
return this.processReq(json); // undefined
}

所以 ES5 的等价物必须是:

var self = this;
return fetch(...)
.then(function (json) {
return self.processReq(json);
});

正如您的特定示例中所发生的那样,this 指的是 Batchprodpry 类的实例。 没有名为 processReq 的本地函数,只有为类实例定义的方法。

关于reactjs - 在没有 this 的 fetch Promise 中调用函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38814997/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com