gpt4 book ai didi

javascript - 请求 promise 未处理的拒绝 RequestError : Error: ETIMEDOUT

转载 作者:太空宇宙 更新时间:2023-11-03 21:49:23 24 4
gpt4 key购买 nike

嗨,我尝试通过 promise 请求编写一些下载功能,但是如果我有超时,我无法处理这个错误,我尝试了很多示例,但仍然有这个错误

Unhandled rejection RequestError: Error: ETIMEDOUT
at new RequestError (/home/parse/node_modules/request-promise-core/lib/errors.js:14:15)
at Request.plumbing.callback (/home/parse/node_modules/request-promise-core/lib/plumbing.js:87:29)
at Request.RP$callback [as _callback] (/home/parse/node_modules/request-promise-core/lib/plumbing.js:46:31)
at self.callback (/home/parse/node_modules/request/request.js:186:22)
at emitOne (events.js:101:20)
at Request.emit (events.js:191:7)
at Timeout._onTimeout (/home/parse/node_modules/request/request.js:816:16)
at ontimeout (timers.js:380:14)
at tryOnTimeout (timers.js:244:5)
at Timer.listOnTimeout (timers.js:214:5)

我的代码

下载功能:

function downloadPhoto(url,uploadUrl,name){
return new Promise(function(resolve, reject){
rp(url,{timeout:15000},function(e){if(e) reject(e);}).on('error', function(e){return reject(e);}).pipe(fs.createWriteStream(name+'.jpg')).on('finish', () => {
//console.log('done Download photo');
return resolve();
});
});

}

调用该函数

function sndPht(url,uploadUrl){
return new Promise(function(resolve, reject){
return downloadPhoto(url,uploadUrl,name).then(function(){
..... some logic .....
}).catch(function(err){
return reject(err);
});
}

对于许多文件,我在 bluebird js map 中调用函数:

Promise.map(photos, function(photo) {
if(photo.type === 'photo'){
return sndPht(photo,uploadUrl);
}
},{concurrency: 1});

我做错了什么?

最佳答案

我有一个解决方案,如果你使用请求 promise ,你喊创建 promise 并返回他并捕获异常,它不能像我的情况一样与管道一起工作,所以我们需要更改功能下载,如

function downloadPhoto(url){
var options = {
uri:url,
timeout:10000,
encoding: 'binary'
};

return rp(options);
}

然后我们就可以像这样使用它

return downloadPhoto(url).then(function(file){
fs.writeFileSync(name+'.jpg', file, 'binary');
}).catch(function(err){
console.log(err);
});

我们可以使用 map

Promise.map(photos, function(photo) {
if(photo.type === 'photo'){
return sndPht(photo,uploadUrl);
}
},{concurrency: 1});

但是如果您需要下载大文件,则需要使用带有回调的请求

关于javascript - 请求 promise 未处理的拒绝 RequestError : Error: ETIMEDOUT,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42775593/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com