npm 请求是异步的吗?
Is npm request asynchronous?
我无法理解 Javascript 异步行为。
我一直以为'request'模块是同步的。不过,我在我的代码中使用了它,但出了点问题。
一个例子:
download_page = function(item) {
page = request.get( { url: 'http://test-fdfdfd.com/' + String(item) })
}
node = new App();
node.on('ready', () => {
console.log("Ready.");
Array.from(Array(3).keys()).forEach(item => download_page(item));
node.stop()
})
在该代码中,节点应仅在三个请求完成后停止。然而,那并没有发生,我不知道为什么。
有人可以给我解释一下吗?
request其实是异步的
您可能希望从您的函数中 return Promise
,然后 Promise.all
所有这些。
download_page = function(item) {
return new Promise((resolve, reject) => {
request.get( { url: 'http://test-fdfdfd.com/' + String(item) }, (err, data) => {
if (err) {
reject(err);
return;
}
resolve(data);
});
});
}
node = new App();
node.on('ready', () => {
console.log("Ready.");
Promise.all(Array.from(Array(3).keys()).map(item => download_page(item)));
node.stop()
})
我无法理解 Javascript 异步行为。
我一直以为'request'模块是同步的。不过,我在我的代码中使用了它,但出了点问题。
一个例子:
download_page = function(item) {
page = request.get( { url: 'http://test-fdfdfd.com/' + String(item) })
}
node = new App();
node.on('ready', () => {
console.log("Ready.");
Array.from(Array(3).keys()).forEach(item => download_page(item));
node.stop()
})
在该代码中,节点应仅在三个请求完成后停止。然而,那并没有发生,我不知道为什么。
有人可以给我解释一下吗?
request其实是异步的
您可能希望从您的函数中 return Promise
,然后 Promise.all
所有这些。
download_page = function(item) {
return new Promise((resolve, reject) => {
request.get( { url: 'http://test-fdfdfd.com/' + String(item) }, (err, data) => {
if (err) {
reject(err);
return;
}
resolve(data);
});
});
}
node = new App();
node.on('ready', () => {
console.log("Ready.");
Promise.all(Array.from(Array(3).keys()).map(item => download_page(item)));
node.stop()
})