我正在使用request-promise node module。我一直在关注文档,并且相信我应该正确设置一切,但是,我收到以下错误:
未处理拒绝StatusCodeError:400 - “{\ n \”错误\“:{\ n
\“status \”:400,\ n \“message \”:\“无效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);
})
})
答案 0 :(得分:1)
您在几个地方(例如rp
循环中)呼叫request
,就好像它是for
一样。由于您没有对这些调用的返回值执行任何操作,因此您不会处理解决方案或拒绝这些承诺,因此会收到错误警告您存在您未处理的拒绝。
您使用返回值的调用看起来也不正确。您传入的回调声明了NodeJS回调样式参数列表,但这不是Promises的工作方式。而不是传递错误或作为第一个参数的null
的单个回调,而是注册单独的回调以解决(成功)和拒绝(错误)。
我建议详细研究the request-promise
page上的示例。
重新开始跟进:
这是正确的方法吗?
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
});