【发布时间】:2015-09-24 04:34:44
【问题描述】:
在下面的代码中,我向comb 添加了一个值,尝试在异步函数中使用该值,然后更改comb 的值。由于 comb.pop() 在请求的回调触发之前多次发生,因此请求中的 comb 值并不理想。在搜索了许多有关堆栈溢出的问题后,我尝试在将梳子作为输入的请求周围放置一个闭包,但这不起作用。我该怎么办?
comb = [1,2,3];
arr = [10,20,30];
promises = [];
for (var i = 0; i < arr.length; i++) {
comb.push(arr[i]);
var promise = new Promise(function(resolve, reject) {
request(url, function(err, res, body) {
// use comb
if (/* comb meets certain condition */)
resolve(body);
});
});
promises.push(promise);
comb.pop();
}
这是我使用闭包的尝试,但没有奏效:
var promise = new Promise(function(resolve, reject) {
(function(comb) {
request(url, function(err, res, body) {
// use comb
if (/* comb meets certain condition */)
resolve(body);
});
})(comb);
});
【问题讨论】:
-
向我们展示闭包示例。是的,您需要一个,如果操作正确,它将起作用。
-
那么你想做什么?像 Promise 实例化时一样使用 comb 副本?
-
看起来不错,但仅适用于数字等基本类型。对象始终通过引用传递,因此上述解决方案不足以复制对象。像
Array.prototype.slice.call(comb)这样的东西应该能够复制一个数组(仅限浅拷贝)。 -
@PSkocik 您应该编辑您的答案以演示如何使用
slice复制参数。
标签: javascript node.js asynchronous promise