javascript - Node 中的请求 promise 未按预期工作

标签 javascript node.js request promise

我正在使用 request-promise node module .我一直在关注文档,并且相信我应该正确设置所有内容,但是,我收到以下错误:

Unhandled rejection StatusCodeError: 400 - "{\n \"error\" : {\n
\"status\" : 400,\n \"message\" : \"invalid id\"\n }\n}" at new StatusCodeError (/Users/fitz035/Desktop/sony/travelLand/node_modules/request-promise/node_modules/request-promise-core/lib/errors.js:32:15)

我的代码如下所示。

var request = require('request');
var rp = require('request-promise');

rp('apiOne' + mood)
  .then(function(error, response, body) {
    console.log(body)
    }
  }).then(function(error) {
    for (var i = 0; i < array; i++) {
      rp('apiTwo', function(error, response, body) {
        console.log(body))
      });
    }
  }).then(function(error, response, body) {
    rp('apiThree' + songListUrl, function(error, response, body) {
      console.log(body))
    });
  })
  .catch(function(err) {
    console.log(err)
  });

编辑

这是正确的做法吗?

var options = {
    uri: 'https://jsonplaceholder.typicode.com/posts/1',
    json: true
}

rp(options).then(function(data){
    console.log(data)
    var optionsTwo = {
        uri: 'http://www.google.com',
    }

    rp(optionsTwo).then(function(data){
        console.log(data)
        console.log(answer);
    })
})

最佳答案

您在某些地方调用 rp 就好像它是 request 一样,例如在您的 for 循环中。由于您没有对这些调用的返回值执行任何操作,因此您没有处理这些 promise 的解决或拒绝,因此收到错误警告您有一个您没有处理的拒绝。

您使用返回值的调用看起来也不正确。您传入的回调声明 NodeJS 回调样式参数列表,但这不是 promises 的工作方式。不是将错误或 null 作为第一个参数传递的单个回调,而是为解决(成功)和拒绝(错误)注册单独的回调。

我建议研究 the request-promise page 上的示例详细点。


关于您的跟进:

Is this the correct approach?

var options = {
    uri: 'https://jsonplaceholder.typicode.com/posts/1',
    json: true
}

rp(options).then(function(data){
    console.log(data)
    var optionsTwo = {
        uri: 'http://www.google.com',
    }

    rp(optionsTwo).then(function(data){
        console.log(data)
        console.log(answer);
    })
})

不,那仍然不能处理拒绝。如果您的目标是连续执行这两个请求(而非并行),请参阅评论:

var options = {
    uri: 'https://jsonplaceholder.typicode.com/posts/1',
    json: true
};

rp(options)
    .then(function(data){
        console.log(data)
        var optionsTwo = {
            uri: 'http://www.google.com'
        };

        return rp(optionsTwo).then(function(data){ // Note the return
            console.log(data)
            console.log(answer);                   // Don't know where `answer` is coming from...?
            // Note that by not returning anything, you convert
            // the resolution value to `undefined`. That's fine if
            // you don't need it, but it's worth pointing out.
        });
    })
    .catch(function(error) {
        // One of the two operations above failed
    });

关于javascript - Node 中的请求 promise 未按预期工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40808035/

相关文章:

javascript - 使用 .animate() 将持续时间动画添加到 jQuery 悬停效果

javascript - 由另一个脚本操纵的内容中的 Jquery 事件

javascript - 从特定的 div 中删除脚本和 html 注释

javascript - Node.js 客户端 session 不创建 req.session

php - Symfony2 如何在 Controller 中注入(inject)请求并获取路由参数

javascript - Sitecore 预览无法加载 javascript

javascript - 如何在nodejs中实现web服务跨域访问?

node.js - 'node' 不是内部或外部命令,也不是可运行的程序或批处理文件。在 git bash 中

checkbox - 请求对话框复选框选项 "don' 发送前询问...”

java - RequestMethod POST 和 GET 在同一个 Controller 中?