NODE JS取消请求
NODE JS cancel request
我正在使用此代码下载节点js:中的文件
var currentVideoRequest = null;
window.spawnVideoPlayer = function (url, subs, movieModel,tag) {
if(currentVideoRequest) {
try
{
currentVideoRequest.abort();
}
catch(err)
{
alert(err.message);
}
}
var fs = require('fs');
var urlrequest = currentVideoRequest = require('request');
urlrequest.get({url: url, encoding: 'binary'}, function (err, response, body) {
fs.writeFile(FILEURL, body, 'binary', function(err) {
});
});
}
在currentVideoRequest.abort();
中,我得到了这个错误:
Object function request(uri, options, callback) {
if (typeof uri === 'undefined') throw new Error('undefined is not a valid uri or options object.')
if ((typeof options === 'function') && !callback) callback = options
if (options && typeof options === 'object') {
options.uri = uri
} else if (typeof uri === 'string') {
options = {uri:uri}
} else {
options = uri
}
options = copy(options)
if (callback) options.callback = callback
var r = new Request(options)
return r
} has no method 'abort'
要添加到@Etai的答案中,在将请求模块用于请求的一个实例之前,您需要它。类似这样的东西:
var request = require('request');
// ...
// then later in the code
var urlrequest = request.get(uri, function(err, response, body) {
// process data here
});
// later, you'd abort this as:
urlrequest.abort();
请注意,我将使用var urlrequest = request.get(params, callback);
保存该实例,以便稍后对其调用abort。
currentVideoRequest是请求对象的构造函数,而不是请求对象,这就是为什么它失败的原因。
请求构造函数在调用时返回一个请求对象,即
require('request')('uri', function(err, resp, body){})
您可以使用abort()方法来停止该请求。
var reqObj = request({uri: 'https://jsonplaceholder.typicode.com/albums' }, function (error, response, body) {
console.log('API requested ') ;
if (!err){
console.log(body);
}
else
{
console.log(err);
}
});
reqObj.abort();
我认为您可以使用此方法来获得所需内容。我以这种方式使用异步,这使得代码更干净,回调更少。
(async function main() {
try {
let urlRequest = await customRequest("http://127.0.0.1:8000/api/product/search?title=foo");
urlRequest.abort();
} catch (e) {
console.log(e);
}
})();
function customRequest(url) {
return new Promise((resolve, reject) => {
request.get(url, (err, res) => {
if (err) reject(err)
if (res.statusCode !== 200)
reject("my Error ");
resolve(res);
})
})
}
此外,如果您不需要回答urlRequest变量,您可以从函数中删除await,如下所示。
try {
let urlRequest = customRequest("http://127.0.0.1:8000/api/product/search?title="); // run in background !
urlRequest.abort();
} catch (e) {
console.log(e);
}
最后,由于如果您犯了错误,我们的请求会返回一个异常,因此如果需要,您可以在catch块中写入abort()。
(async function main() {
try {
var urlRequest =await customRequest("http://127.0.0.1:8000/api/product/search?title=");
} catch (e) {
urlRequest.abort();
console.log(e);
}
})();
此外,由于customRequest()
函数返回promise note,因此使用then()
而不是async await。
相关文章:
- 如何在AngularJS中取消挂起的请求
- 是否可以通过Primefaces 3.3的自定义对话框取消Ajax请求
- 当搜索字段为空时,取消所有ajax请求
- Ajax 请求正在取消页面上的其他 JS 事件
- 取消FB.api(..)请求
- 取消已提交的http请求
- 选中/取消选中时复选框ajax请求
- HTTP_STREAM_PARSER_READ_HEADERS之后取消AJAX请求
- 为什么可以't我取消了这个Angular HTTP请求
- 在删除视图时取消所有传出的REST HTTP请求
- 我如何才能获得隐藏/取消隐藏按钮来同时发送帖子请求
- 如何在页面卸载时发送AJAX PUT请求而不取消
- 在慢速网络上,上一个Ajax请求会被下一个取消
- 取消请求动画设置时间后的帧
- 如果用户发送另一个请求,请使用 .abort() 取消现有的 ajax 请求
- JQuQuery UI 对话框取消 AJAX 请求
- 当我们使用 ajax post 请求上传文件时,如何取消将文件上传到服务器并删除文件(在上传未完成之间)
- 取消以前由 ng-change 创建的 api 请求
- 区分ajax错误中的请求失败(无网络)和请求取消(HTTP状态码0)
- 为什么我的https://请求取消并更改为http://,导致混合请求错误