Node.js中带有async.retry的同步请求
nodejs版本v10.14.2 操作系统win7 sp1 64位 我需要按顺序执行以下四行代码Node.js中带有async.retry的同步请求,node.js,asynchronous,Node.js,Asynchronous,nodejs版本v10.14.2 操作系统win7 sp1 64位 我需要按顺序执行以下四行代码 var res2 = await fetchData(url_2, file_path_2); await console.log('step one.'); var res1 = await fetchData(url_1, file_path_1); await console.log('step two.'); 但是,它们的实际执行顺序是 第一步。 第二步。 ........ 如何实现这四
var res2 = await fetchData(url_2, file_path_2);
await console.log('step one.');
var res1 = await fetchData(url_1, file_path_1);
await console.log('step two.');
但是,它们的实际执行顺序是
第一步。
第二步。
........
如何实现这四行代码的同步执行?
var https = require('https');
var fs = require('fs');
var request = require('request');
var async = require("async");
(async() => {
var url_1 = 'https://aaa.bbb.ccc.com';
var url_2 = 'https://library.harvard.edu/';
var file_path_1 = fs.createWriteStream('./intelcenter/aaa.bbb.ccc.txt');
var file_path_2 = fs.createWriteStream('./intelcenter/harvard.txt');
var res2 = await fetchData(url_2, file_path_2);
await console.log('step one.');
var res1 = await fetchData(url_1, file_path_1);
await console.log('step two.');
})();
async function fetchData(url,locpath) {
return new Promise(function (resolve) {
async.retry(request(url).pipe(locpath), function(err, result) {
resolve(result);
});
});
}
同步码
我为请求模块添加了回调函数,并通过next方法传递结果
默认情况下,async.retry将进行5次重试
var fs = require("fs");
var request = require("request");
var async = require("async");
(async () => {
var url_1 = "https://google.com";
var url_2 = "https://library.harvard.edu/";
var file_path_1 = fs.createWriteStream("./intelcenter/aaa.bbb.ccc.txt");
var file_path_2 = fs.createWriteStream("./intelcenter/harvard.txt");
var res2 = await fetchData(url_2, file_path_2);
console.log("step one." + res2);
var res1 = await fetchData(url_1, file_path_1);
console.log("step two." + res1);
})();
function fetchData(url, locpath) {
console.log("inside fetchData");
return new Promise(function(resolve, reject) {
async.retry(
function(next) {
request(url, function(err, result) {
if (err) {
console.log(err);
}
console.log("inside request");
next(result);
}).pipe(locpath);
},
function(result) {
resolve(result);
}
);
});
}
了解更多关于
没有异步的同步代码。重试
var fs = require("fs");
var request = require("request");
(async () => {
var url_1 = "https://google.com";
var url_2 = "https://library.harvard.edu/";
var file_path_1 = fs.createWriteStream("./intelcenter/aaa.bbb.ccc.txt");
var file_path_2 = fs.createWriteStream("./intelcenter/harvard.txt");
var res2 = await fetchData(url_2, file_path_2);
console.log("step one.");
var res1 = await fetchData(url_1, file_path_1);
console.log("step two.");
})();
function fetchData(url, locpath) {
console.log("inside fetchData");
return new Promise(function(resolve, reject) {
request(url, function(err, result) {
if (err) {
console.log(err);
}
console.log("got result");
result=JSON.stringify(result);
locpath.write(result);
resolve(result);
});
});
}
您应该解释更改的内容和原因。我已删除async.retry,我正在将结果写入请求模块的回调函数内的文件。@Brad我已修改了此问题的答案async api,起初我不理解apiMethod的含义,现在被函数(下一个)async.retry替换({times:10,interval:function(retryCount){return 50*Math.pow(2,retryCount);}},apiMethod,function(err,result){//对结果做点什么});