【发布时间】:2016-06-30 13:59:42
【问题描述】:
在 _.mapValues 内部,我想获得一些具有一定延迟的修改值(例如来自 DB),但我遇到了问题:当我在同步模式下修改值时,一切都很好,当我尝试使用 Promise 或回调它的工作时不正确(在第一种情况下,我得到 Promise 对象,在第二种情况下:未定义的值)。 这里有一些简化的例子,我如何在 mapValues 中重写代码来解决这个问题?
'use strict';
const _ = require('lodash');
const Promise = require('bluebird');
let obj = {
one: 1,
two: 2,
};
let increment = (value) => {
return value + 1;
};
let incrementProm = (value) => {
return Promise.resolve(value + 1);
};
let incrementCb = (value, cb) => {
let res = value + 1;
let err = null;
setTimeout(cb.bind(undefined, err, res), 100);
};
let t1 = _.mapValues(obj, (value) => {
return increment(value);
});
let t2 = _.mapValues(obj, (value) => {
return incrementProm(value);
});
let t3 = _.mapValues(obj, (value) => {
let temp;
incrementCb(value, (err, res) => {
temp = res;
});
return temp;
});
console.log('Sync res:');
console.log(t1);
console.log('Promise res:');
console.log(t2);
console.log('Callback res:');
console.log(t3);
【问题讨论】:
标签: javascript node.js lodash