Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/409.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/35.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 返回回调';这是诺言的结果_Javascript_Node.js_Callback_Promise - Fatal编程技术网

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)
          })

      });
    }