我有一个对象数组。对于数组的每个元素,我都需要发出POST请求。 POST请求成功后,我需要获取该元素的子对象并重复该过程。我使用递归函数调用
实现了此功能这是需要遵循的层次结构。仅创建第一级,即type1和type2。为什么未为子对象调用递归函数?
function func1(typeid) {
getTypes(typeid).then(function(responseData) { //getTypes returns all the child types of a given parent typeid
var types = JSON.parse(responseData);
AuthClient.credentials.getToken()
.then(function(token) {
types.forEach(function(element) {
var options = {
method: 'POST',
url: url,
qs: {
access_token: token.accessToken
},
headers: {
'content-type': 'application/json'
},
body: element,
json: true
}
request(options, function(error, response, body) {
if (error) throw new Error(error)
if (response.statuscode === 200) {
func1(element.id);
console.log(body);
}
});
});
})
.catch(function(err) {
console.log(err);
});
});
}
func1(roottypeid);
答案 0 :(得分:0)
我认为您提供的代码中没有错误;绝对不是递归错误。通过伪造您正在调用的服务,我可以使其与您的确切代码一起使用。
仔细检查是否有错字,例如错别字。 (您的服务返回statuscode
还是statusCode
吗?)
const AuthClient = {credentials: {getToken: () =>
Promise.resolve({accessToken: 'foobar'})
}}
const getTypes = (typeid) =>
new Promise((resolve, _) => resolve(({
roottypeid: `[{"id": "type1"}, {"id": "type2"}]`,
type1: `[{"id": "type11"}, {"id": "type12"}]`,
type11: `[{"id": "type111"}]`,
type2: `[{"id": "type21"}, {"id": "type22"}]`
})[typeid] || `[]`)
)
const request = (options, fn) => setTimeout(
() => fn (
null,
{statuscode: 200},
`fake results for ${JSON.stringify(options.body)}`
),
10
)
const url = 'http://example.com'
const roottypeid = 'roottypeid'
function func1(typeid) {
getTypes(typeid).then(function(responseData) { //getTypes returns all the child types of a given parent typeid
var types = JSON.parse(responseData);
AuthClient.credentials.getToken()
.then(function(token) {
types.forEach(function(element) {
var options = {
method: 'POST',
url: url,
qs: {
access_token: token.accessToken
},
headers: {
'content-type': 'application/json'
},
body: element,
json: true
}
request(options, function(error, response, body) {
if (error) throw new Error(error)
if (response.statuscode === 200) {
func1(element.id);
console.log(body);
}
});
});
})
.catch(function(err) {
console.log(err);
});
});
}
func1(roottypeid);