我有一个异步/等待函数,它没有分配给一个对象,我不知道为什么。我正在安慰结果,它看起来很正常,但当它命中一个对象的实际赋值时,它不会赋值。我将在下面解释:
下面是代码:
这只是asyncForEach的一个辅助函数:
async function asyncForEach(array, callback) {
for (let index = 0; index < array.length; index++) {
await callback(array[index], index, array);
}
}
然后我有以下几点:
const asyncFunc = async () => {
await asyncForEach(tempPosts, async (tempPost) => {
if (tempPost.fileName!=''){
console.log('tempPosts[tempPosts.indexOf(tempPost)]: ',
tempPosts[tempPosts.indexOf(tempPost)])
console.log("await fsPromise.readFile(__dirname+'/../picFolder/sharp/'+tempPost.fileName)",
await fsPromise.readFile(__dirname+'/../picFolder/sharp
/'+tempPost.fileName))
tempPosts[tempPosts.indexOf(tempPost)]['data'] =
await fsPromise.readFile(__dirname+'/../picFolder/sharp/'+tempPost.fileName)
console.log('after assignment and value of tempPosts in asyncForEach: ', tempPosts)
}
})
}
下面是三个javascript日志的结果:
console.log('tempPosts[tempPosts.indexOf(tempPost)]: ',
tempPosts[tempPosts.indexOf(tempPost)])
结果:
tempPosts[tempPosts.indexOf(tempPost)]: { flags: 0,
fileName: '1552601360288&&travelmodal.png',
comments: [],
_id: 5c8ad110ef45f6e51a323a18,
body: 'asdasdfasdf',
created: 2019-03-14T22:09:20.427Z,
__v: 0 }
这似乎是正确的。
和
console.log("await fsPromise.readFile(__dirname+'/../picFolder/sharp/'+tempPost.fileName)",
await fsPromise.readFile(__dirname+'/../picFolder/sharp
/'+tempPost.fileName))
给予..。
await fsPromise.readFile(__dirname+'/../picFolder/sharp/'+tempPost.fileName)
<Buffer 89 50 4e 47 0d 0a 1a 0a 00 00 00 0d 49 48 44 52 00 00 00 c8 00 00 00 62 08 06 00 00 00 15 df 9c 16 00 00 00 09 70 48 59 73 00 00 16 25 00 00 16 25 01 ... >
这是我想要的很长的数据缓冲区字符串。凉爽的。
然而,
after assignment and value of tempPosts in asyncForEach: [ { flags: 0,
fileName: '1552601360288&&travelmodal.png',
comments: [],
_id: 5c8ad110ef45f6e51a323a18,
body: 'asdasdfasdf',
created: 2019-03-14T22:09:20.427Z,
__v: 0 },
{ flags: 0,
fileName: '1552601320137&&Screen Shot 2019-03-09 at 10.03.09 AM.png',
comments: [],
_id: 5c8ad0e8ef45f6e51a323a17,
body: 'adf',
created: 2019-03-14T22:08:40.336Z,
__v: 0 } ]
什么?我调用的是Object['newKey'] = await fsPromise.readFile(yadayada)
,其中显示了await fsPromise.readFile(yadayada)
可以在console.log中工作。为什么我不能这样做,这没有任何意义。
发布于 2019-03-15 10:08:09
我刚刚做了一个小测试,如果您尝试获取要打印的'data‘属性,您似乎应该能够看到输出:
console.log('after assignment and value of tempPost in asyncForEach: ',tempPosts[tempPosts.indexOf(tempPost)]['data'])
但是,尝试console.log(tempPost)
的不会显示data
,除非您已经在TempPost的mongoose模式中定义了该键
如果你想把tempPost作为普通的javascript对象来操作,你需要通过调用toObject
把tempPost模型文档转换成普通的JavaScript对象,例如。tempPost = tempPost.toObject();
之后,你的console.log('after assignment and value of tempPosts in asyncForEach: ', tempPosts)
将会给出预期的结果。
因此,这实际上与异步/等待和分配无关,imo
https://stackoverflow.com/questions/55173074
复制相似问题