首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >异步/等待未赋值的对象

异步/等待未赋值的对象
EN

Stack Overflow用户
提问于 2019-03-15 06:40:19
回答 1查看 138关注 0票数 1

我有一个异步/等待函数,它没有分配给一个对象,我不知道为什么。我正在安慰结果,它看起来很正常,但当它命中一个对象的实际赋值时,它不会赋值。我将在下面解释:

下面是代码:

这只是asyncForEach的一个辅助函数:

代码语言:javascript
复制
  async function asyncForEach(array, callback) {
    for (let index = 0; index < array.length; index++) {
      await callback(array[index], index, array);
    }
  }

然后我有以下几点:

代码语言:javascript
复制
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日志的结果:

代码语言:javascript
复制
console.log('tempPosts[tempPosts.indexOf(tempPost)]: ',
tempPosts[tempPosts.indexOf(tempPost)])

结果:

代码语言:javascript
复制
tempPosts[tempPosts.indexOf(tempPost)]:  { flags: 0,
  fileName: '1552601360288&&travelmodal.png',
  comments: [],
  _id: 5c8ad110ef45f6e51a323a18,
  body: 'asdasdfasdf',
  created: 2019-03-14T22:09:20.427Z,
  __v: 0 }

这似乎是正确的。

代码语言:javascript
复制
console.log("await fsPromise.readFile(__dirname+'/../picFolder/sharp/'+tempPost.fileName)", 
await fsPromise.readFile(__dirname+'/../picFolder/sharp                
  /'+tempPost.fileName))

给予..。

代码语言:javascript
复制
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 ... >

这是我想要的很长的数据缓冲区字符串。凉爽的。

然而,

代码语言:javascript
复制
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中工作。为什么我不能这样做,这没有任何意义。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-03-15 10:08:09

我刚刚做了一个小测试,如果您尝试获取要打印的'data‘属性,您似乎应该能够看到输出:

代码语言:javascript
复制
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

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/55173074

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档