Promise yönteminde yaşadığım sorun (Asenkron çalışmak)

Merhabalar. Aşağıda verdiğim kodları çalıştırdığımda aşağıdaki gibi bir konsol çıktısı alıyorum.

const express = require('express');
const app = express();
const path = require('path');
const mngs = require('mongoose');
const bodyparser = require('body-parser');
const { resolve } = require('dns');
const { rejects } = require('assert');

app.use('/public', express.static(path.join(__dirname, 'public'))); //express.static herkese açık klasörü belirler
app.use(bodyparser.urlencoded({extended:false})); // URL olarak gelen requestleri parçalayarak kullanımını kolaylaştırır
app.use(bodyparser.json({extended:false})); // JSON olarak gelen requestleri parçalayarak kullanımını kolaylaştırır

//mongo ile bağlantı kuruluyor "mongodb://127.0.0.1:27017" ifadesi standarttır. "/chatDB" ise oluşturduğumuz DB ismi

mngs.connect('mongodb://127.0.0.1:27017/chatDB',{ useNewUrlParser: true, useUnifiedTopology: true }, function(err,data){
  if (err){
      console.log('sunucu bağlantı hatası:'+err)
  }else{
  console.log('DB bağlandı...')}
});

//mongoose ile veri göndermek için önce veri tabanı şeması oluşturuyoruz, böylece giden veriler şema ile aynı yapıda DB'ye kaydolacak. "mesajlar" colection ismimizi gösterir
const Schema = mngs.Schema;
let DBsema = new Schema(
  {
  msgID:String,
  mesaj:String,
  tarih:{type:Date, default:Date.now}
  },
  {
    collection:'mesajlar'
  }
);
let ChatSema = mngs.model('ChatSema', DBsema);

//ana sayfa için index.html sayfasını gönderiyoruz
//Get metodu ile
app.get('/', function (req, res) {
    res.sendFile(__dirname + '/index2.html');
});

//Post ile gelen veriyi DB'ye yazma
app.post('/', function (req, res) {
    res.sendFile(__dirname + '/index2.html');
    console.log('post geldi');
    var varmesaj= req.body.mesaj;
    ChatSema.create({mesaj:varmesaj}, function(err,result){
        if(err) throw err;
    console.log('mesaj DBye yazıldı');
    });
});

var mypromise = new Promise((resolve,rejects)=>{
    let a=true;
    if(a==true){
        console.log('promise başladı');      
        resolve('ilk thene geçildi');
    }
    rejects('promise başlamadı');
});

setTimeout(() => {
    mypromise.then((veriler)=>{
        console.log('1-'+veriler);
       ChatSema.find({},function(err,data){
            if(err) throw err;
        console.log('2-datanın saf hali:'+data);
            var son_veri_no= data.length-1
            var son_msgID= data[son_veri_no].msgID;
            console.log('3-son mesajın IDsi:'+son_msgID);
        return son_msgID;
        });
    }).then((son_msgID)=>{
        console.log('4-ikinci then basladı');
        console.log('5-msgID son hali:'+son_msgID);
    })
}, 5000);

//sunucu çalışmaya başlar
app.listen(9999, function () {
    console.log('Sunucu çalışıyor...');
  });

konsol çıktısı:

promise başladı
Sunucu çalışıyor...
DB bağlandı...
1-ilk thene geçildi
4-ikinci then basladı
5-msgID son hali:undefined
2-datanın saf hali:{
  _id: new ObjectId("6261b0eee921bc34f9de72d1"),
  mesaj: 'denemede',
  tarih: 2022-04-21T19:30:54.925Z,
  __v: 0,
  msgID: '1'
}
3-son mesajın IDsi:1

Benim anlamadığım: Promise yapısını 1,2,3,4,5 şeklinde sıra ile ilerlemesi için kurdum sorun nerede?

asenkron fonksiyon içinde asenkron fonksiyon çağırıyorsun o yüzden beklemiyor,
asenkron fonksiyona then koydun diye içindeki asenkron fonksiyonların bitmesini beklemez.

2 Beğeni

Kesinlikle haklısınız, ben Promise yapısını bu asenkron akışı engellemek için kullanabileceğimi düşünmüştüm ama sadece yaptığım yönlendirmek oluyormuş. Callback mantığını meğerse hiç anlamamışım onu farkettim. Aşağıdaki video tam anlamıyla bütün kafamdaki soruların cevabı oldu, herkesin izlemesini tavsiye ederim.

Bu adam da saçmalamış.

Web api tarafı diye birşey yok hepsi js, mozilla dökümanında web api dediği js de dilin kendi metodları onlar. Ajax onlardan değil ajax bir kütüphane.