Javascript 返回回调';这是诺言的结果
我尝试在类中创建一个通用的Javascript 返回回调';这是诺言的结果,javascript,node.js,callback,promise,Javascript,Node.js,Callback,Promise,我尝试在类中创建一个通用的请求方法 它应该是向API发出请求、返回结果(XML格式)、将结果解析为JSON以及处理错误的中心位置 对于我使用的解析,什么与回调一起工作 我应该如何从回调返回结果,以便在调用函数令牌后可以使用JSON 现在它返回一些奇怪的结果(可能是解析器.parseString()) 代码如下: class Foo { token(){ // ... return this.request(uri, xml) } request(uri, xml)
请求方法
它应该是向API发出请求、返回结果(XML格式)、将结果解析为JSON以及处理错误的中心位置
对于我使用的解析,什么与回调一起工作
我应该如何从回调返回结果,以便在调用函数令牌后可以使用JSON
现在它返回一些奇怪的结果(可能是解析器.parseString()
)
代码如下:
class Foo {
token(){
// ...
return this.request(uri, xml)
}
request(uri, xml) {
// ...
return rp.post(options).then(response=>{
return parser.parseString(response.body, (err, result) => {
// I can see the correct JSON result in the console
console.log(JSON.stringify(result))
return JSON.stringify(result)
})
}).catch(err=>{
console.log(err)
})
}
}
// usage
const foo = new Foo()
foo.token().then(res => {
console.log(res) // no result
})
你可以用承诺来实现它。通过承诺链,它可以被解决
request = (uri, xml) => {
return new Promise((resolve, reject) => {
rp
.post(options)
.then(response => {
return parser.parseString(response.body, (err, result) => {
resolve(JSON.stringify(result))
})
})
.catch(err => {
reject(err)
})
});
}
你不会从承诺中返回,你会在中做事情,然后。承诺链是明智的。然而,这是@Quentin的一个例子,即使是它的反模式,但仍然是它使用chaining@Quentin你能给我们看看你的建议吗?Thanks@user3568719-有一个非常好的重复问题解释了如何使用回调。@RIYAJKHAN-不,不是。如果您当时正在链接,request
将返回上一个then
函数返回的承诺,而不是在request
中立即创建的、由传递给then
的函数解析的承诺。
request = (uri, xml) => {
return new Promise((resolve, reject) => {
rp
.post(options)
.then(response => {
return parser.parseString(response.body, (err, result) => {
resolve(JSON.stringify(result))
})
})
.catch(err => {
reject(err)
})
});
}