为什么 Yield 不适用于请求模块?
Why Yield is not working with request module?
我有一个场景,我有一个 URL 的数组,需要使用请求 npm 模块同步评估。详细来说,Array 将是 forEach,它应该为当前 url 带来数据,然后才移动到选择下一个 url。我正在使用收益生成器。但它不起作用。请大家帮忙!
var Promise = require("bluebird");
var request = Promise.promisify(require("request"), {multiArgs: true});
Promise.promisifyAll(request, {multiArgs: true})
var url_arr = ["https://maps.googleapis.com/maps/api/geocode/json?address=1600+Amphitheatre+Parkway,+Mountain+View,+CA&key=AIzaSyDe3MyoHI6aSbYKdHOXloz9QepAMfes9XE", "https://maps.googleapis.com/maps/api/geocode/json?address=1600+Amphitheatre+Parkway,+Mountain+View,+CA&key=AIzaSyDe3MyoHI6aSbYKdHOXloz9QepAMfes9XE"];
function* fetch(obj) {
console.log("2")
var myobj = yield request.getAsync(obj).promise();
console.log("3", myobj)
return myobj;
}
url_arr.forEach(function (obj){
console.log("1", obj)
var output = fetch(obj);
console.log("4, ", output);
});
在上面的代码片段中,只有 1 && 4 打印在控制台中。我认为从未评估过二和三。
从生成器函数中删除 return
语句,这会暂停生成器,调用 .next()
以获取 yield
ed 对象的 value
function* _fetch(obj) {
var myobj = yield obj;
}
[1,2,3].forEach(function (obj) {
var {value:output} = _fetch(obj).next();
console.log("output:", output);
});
我有一个场景,我有一个 URL 的数组,需要使用请求 npm 模块同步评估。详细来说,Array 将是 forEach,它应该为当前 url 带来数据,然后才移动到选择下一个 url。我正在使用收益生成器。但它不起作用。请大家帮忙!
var Promise = require("bluebird");
var request = Promise.promisify(require("request"), {multiArgs: true});
Promise.promisifyAll(request, {multiArgs: true})
var url_arr = ["https://maps.googleapis.com/maps/api/geocode/json?address=1600+Amphitheatre+Parkway,+Mountain+View,+CA&key=AIzaSyDe3MyoHI6aSbYKdHOXloz9QepAMfes9XE", "https://maps.googleapis.com/maps/api/geocode/json?address=1600+Amphitheatre+Parkway,+Mountain+View,+CA&key=AIzaSyDe3MyoHI6aSbYKdHOXloz9QepAMfes9XE"];
function* fetch(obj) {
console.log("2")
var myobj = yield request.getAsync(obj).promise();
console.log("3", myobj)
return myobj;
}
url_arr.forEach(function (obj){
console.log("1", obj)
var output = fetch(obj);
console.log("4, ", output);
});
在上面的代码片段中,只有 1 && 4 打印在控制台中。我认为从未评估过二和三。
从生成器函数中删除 return
语句,这会暂停生成器,调用 .next()
以获取 yield
ed 对象的 value
function* _fetch(obj) {
var myobj = yield obj;
}
[1,2,3].forEach(function (obj) {
var {value:output} = _fetch(obj).next();
console.log("output:", output);
});