目标:我想将数组的所有值设置为(valueofIndex + 1)并最后记录新数组。
**EDIT:**
这个DOESNT工作:
var async = require('async');
var arr = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10];
function attemptAtAsyncEach (arr) {
return async.map(arr, function (member, callback) {
callback(null, member + 1);
}, function (err, results) {
return results;
});
}
console.log(attemptAtAsyncEach(arr));
这项工作:
var async = require('async');
var arr = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10];
function attemptAtAsyncEach (arr) {
return async.map(arr, function (member, callback) {
callback(null, member + 1);
}, function (err, results) {
console.log( results);
});
}
attemptAtAsyncEach(arr);
如果我在回调中返回结果而不是console.log,为什么它显示未定义?
答案 0 :(得分:1)
var async = require('async')
var arr = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
async.forEach(Object.keys(arr), function (i, callback){
// if you mean: value of the index + 1
arr[i] = parseInt(i) + 1
// OR if you mean: value at the index + 1
arr[i] += 1
callback()
}, function(err) {
console.log(arr)
});
注意:为了获取您要编辑的元素的索引,您传递数组的键而不是数组。键是字符串,因此您需要解析它。
答案 1 :(得分:1)
var async = require('async')
var arr = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10];
async.map(arr, function (i, callback) {
callback(null, i + 10);
}, function(err, result) {
console.log(result)
});
如果您检查documentation on map
,您会看到参数为:
功能
一个应用于coll中每个项目的函数。迭代器传递一个回调(错误,转换),一旦完成并且有错误(可以为null)和转换项,就必须调用它。用(item,callback)调用。
它不适用于简单的return
,因为您正在处理异步操作,返回将是同步。
我还想在没有async lib的情况下包含其他方法来做同样的事情:
需要带有--harmony
标记的TypeScript或Babel或Node 7+。
var arr = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10];
(async function () {
var x = await Promise.all(arr.map(i => new Promise(r => r(i + 10))));
console.log(x);
}());
var arr = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10];
Promise.all(arr.map(i => new Promise(r => r(i + 10))))
.then(console.log);
答案 2 :(得分:0)
First of all, unless you are doing asynchronous operations inside your forEach/map a synchronous forEach/map will be quicker. Your entire code function essentially translates to console.log(arr.map(member => member+1));
Anyway, inside an async.map(...), you must call the provided callback function to indicate the end of your 'asynchronous' process.
function attemptAtAsyncEach (arr) {
return async.map(arr, function (member, callback) {
callback(null, member+1);
}, function (err, result) {
console.log(result);
});
}