먼저, 약간 모호한 제목; 나는 하나 더 적절한를 찾을 수 없습니다 : 나는 일부 데이터를 가져 오는 다음 EJS로 렌더링 할 몽구스를 사용하고몽구스 약속의 비동기
시나리오. ,
app.get('/view', function (req, res) {
// What I am trying to do
User.find({}).exec().then(vals=>{
res.send(vals)
})
문제점 의도 한대로 위의 코드가 작동
하지만 액세스 코드에 : 내 서버에 파일에서
// Schema
var UserSchema = mongoose.Schema({
Username: String,
City: String
})
// Model
var User = mongoose.model('User', UserSchema);
: 그림을 위해, 다음 사항을 고려 다른 파일은 물론 업그레이드를 더 쉽게 만들기 위해 다른 파일을 옮긴 다음 require() 파일을 옮기고 싶습니다.
handler.js
// Promise: Get All Names
function FetchData(){
return User
.find({})
.exec();
}
module.exports = {
Get: function(){
val = User.find({}).exec()
.then(vals=>{
// Expected to return only after the above is complete
return vals
})
}
}
다음, 내 서버 파일에서 :
var handler = require('handler')
app.get('/view', function (req, res) {
res.send(handler.Get())
});
불행하게도,이 코드는
내 생각
을 의도 한대로 작동하지 않습니다필자는 매개 변수를 다양하게하고 코드를 몇 차례 조정했지만 잘못된 점을 파악하지 못했습니다. Get()의 값이 약속이 사용되기 전에 (즉 수수께끼 인) 반환되는 것으로 보입니다.
어떤 도움을 크게 환영받을 것이다 :
당신은 아직 할 수없는 '약속 콜백 내부에서 외부 함수로부터 return' . promise 객체 자체를 반환하고 호출자에서 결과를 '다음'으로 사용해야합니다. 약속은 코드를 동기식으로 만들지 않으며, 미래의 가치를 즉각적으로 제공하지 않습니다! – Bergi
해결 방법이 있습니까? – Isfaaq
아니요. 타임머신을 발명 할 때까지는 해결 방법이 없습니다. – Bergi