【发布时间】:2020-02-07 10:44:30
【问题描述】:
我对 javascript 的 Promise 不熟悉,因此感谢您的帮助。我的代码尝试从 firebase 访问数据库并将函数中的列表从 main_page.js 传递给 index.js。我正在以承诺的形式取回我的结果,但我很难访问其中的值。
main_page.js:UniqueCourse 函数,用于从 firebase 检索课程。返回课程列表
// Get Unique Course ID
function UniqueCourse(t_id){
var courseArray = []
return Promise.resolve(
firebase.database().ref('/users').once('value',
function(snapshot) {
details = snapshot.val()
//console.log(snapshot.val());
for (var key in details) {
if (details.hasOwnProperty(key)) {
//console.log(key + " , " + details[key].username + "\n");
if (details[key].username == t_id){
console.log("Details of Array " + details[key].courses.split(','));
courseArray = details[key].courses.split(',');
return courseArray
}
}
}
})
).then(function(value){
return value;
})
}
main_page.js:导出UniqueCourse函数供外部使用
module.exports.UniqueCourse = (t_id) => {
return UniqueCourse(t_id)
}
index.js:获取从 main_page.js 中 UniqueCourse 函数传递的列表
Promise.resolve(main_page.UniqueCourse(req.body.username)).then(function(value){
console.log(value);
})
index.js 中的 console.log(value) 应该包含 UniqueCourse(t_id) 中的课程列表。但是,我得到的是console.log(value) 上显示的promise 对象。我很难从 promise 对象访问列表。
控制台输出
Details of Array CZ4047,CZ3003
DataSnapshot {
node_:
ChildrenNode {
children_:
SortedMap { comparator_: [Function: NAME_COMPARATOR], root_: [LLRBNode] },
priorityNode_:
ChildrenNode {
children_: [SortedMap],
priorityNode_: null,
indexMap_: [IndexMap],
lazyHash_: '' },
indexMap_: IndexMap { indexes_: [Object], indexSet_: [Object] },
lazyHash_: null },
ref_:
Reference {
repo:
Repo {
repoInfo_: [RepoInfo],
app: [FirebaseAppImpl],
dataUpdateCount: 2,
statsListener_: null,
eventQueue_: [EventQueue],
nextWriteId_: 1,
interceptServerDataCallback_: null,
onDisconnect_: [SparseSnapshotTree],
persistentConnection_: [PersistentConnection],
stats_: [StatsCollection],
server_: [PersistentConnection],
statsReporter_: [StatsReporter],
transactionQueueTree_: [Tree],
infoData_: [SnapshotHolder],
infoSyncTree_: [SyncTree],
serverSyncTree_: [SyncTree],
__database: [Database] },
path: Path { pieces_: [Array], pieceNum_: 0 },
queryParams_:
QueryParams {
limitSet_: false,
startSet_: false,
startNameSet_: false,
endSet_: false,
endNameSet_: false,
limit_: 0,
viewFrom_: '',
indexStartValue_: null,
indexStartName_: '',
indexEndValue_: null,
indexEndName_: '',
index_: PriorityIndex {} },
orderByCalled_: false },
index_: PriorityIndex {} }
预期的控制台输出
Details of Array CZ4047,CZ3003
[CZ4047,CZ3003]
【问题讨论】:
-
不要在答案中加入“已解决”部分。这不是 Stack Overflow 的工作方式。问题的答案应该在答案部分。如果您自己有一个尚未发布的答案,请自己发布一个。这在 Stack Overflow 上是可以接受的。
-
你
Promise.resolve(anotherPromise)的原因是什么?
标签: javascript node.js function express promise