我正在使用 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/