亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

嘗試通過 Node.js 中的元素索引從數組導出對象時,值未定義

嘗試通過 Node.js 中的元素索引從數組導出對象時,值未定義

一只名叫tom的貓 2024-01-18 10:52:17
最初,我在文件內有一個空數組,但在代碼執行期間,我從數據庫獲取數據并將數據推送到數組中。我的代碼如下所示:items.jsconst items = [];const init = (connection) => {  return connection.collection('collectionName')    .aggregate([{      ....        }])    .toArray()    .then(result => {      items.push(...result);      return result;    });     };module.exports = {  init,  all: items,  item1: items[0],  item2: roles[1],};當我嘗試在不同的文件中使用 require 導入所有 item1 和 item2 時,如下所示:const { all, item1, item2 } = require('../data/items');我得到了包含 object 的數組,但 item1 和 item 2 未定義。我似乎不明白問題是什么。我知道我可以在導出時使用匿名函數并以這種方式獲取數據,但我寧愿通過嘗試按元素索引訪問數組中的數據來實現。非常感謝所有的幫助!
查看完整描述

1 回答

?
倚天杖

TA貢獻1828條經驗 獲得超3個贊

我得到了帶有對象的數組

鑒于該代碼,您不應該這樣做。init不過,想必您會在某個時候打電話。

但 item1 和 item 2 未定義。我似乎不明白問題是什么。

當您讀取items[0]將其分配給要導出的對象時,異步函數尚未完成,因此該數組仍然是一個空數組。

可以item1用一個getter來替換,該 getter 在您嘗試讀取該屬性時獲取當前值,但這可能仍然會導致競爭條件。items[0]item1

更好的解決方案可能是導出一個承諾,一旦獲取完成,該承諾將被評估為對象。

顯然,您需要在導出的值上使用then()or 。await您不會直接從import.

const init = async (connection) => {

? ? const items = await connection.collection('collectionName')

? ? .aggregate([{

? ? ? ....

? ??

? ? }])

? ? .toArray()

? ? return {

? ? ? ? all: items,

? ? ? ? item1: items[0],

? ? ? ? item2: roles[1], // whatever roles is

? ? }

};


module.exports = init();


const promise = require('../data/items');

const { all, item1, item2 } = await promise;


查看完整回答
反對 回復 2024-01-18
  • 1 回答
  • 0 關注
  • 122 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號