在没有这个的情况下调用 fetch promise 中的函数
call function in a fetch promise without this
我想知道,我该怎么做才能在 fetch 中调用 promise 中的函数?
请注意这一行:.then(json => this.processReq(json))
我必须使用 this.
,因为如果不这样做,它会说 processReq
是 undefined
。不应该是这样的:.then(json => processReq(json))
因为 ES6 ??
这是我的代码(我使用的是 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
绑定到手头函数体之外的其他东西。
如果您使用 ES5 语法来表达类似的函数,this
将绑定到函数体,而 this.processReq
将是未定义的:
function (json) {
return this.processReq(json); // undefined
}
所以 ES5 等效项必须是:
var self = this;
return fetch(...)
.then(function (json) {
return self.processReq(json);
});
在您的特定示例中,this
指的是 Batchprodpry
class 的实例。 没有名称为 processReq
的局部函数,只有为 class 实例定义的方法。
我想知道,我该怎么做才能在 fetch 中调用 promise 中的函数?
请注意这一行:.then(json => this.processReq(json))
我必须使用 this.
,因为如果不这样做,它会说 processReq
是 undefined
。不应该是这样的:.then(json => processReq(json))
因为 ES6 ??
这是我的代码(我使用的是 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
绑定到手头函数体之外的其他东西。
如果您使用 ES5 语法来表达类似的函数,this
将绑定到函数体,而 this.processReq
将是未定义的:
function (json) {
return this.processReq(json); // undefined
}
所以 ES5 等效项必须是:
var self = this;
return fetch(...)
.then(function (json) {
return self.processReq(json);
});
在您的特定示例中,this
指的是 Batchprodpry
class 的实例。 没有名称为 processReq
的局部函数,只有为 class 实例定义的方法。