Node.js SQL değerini çekmiyor

Mucosoft

Megapat
Katılım
5 Mart 2014
Mesajlar
5.508
Makaleler
12
Çözümler
41
Böyle bir kod deniyorum fakat "return" ekleyince değer dönmüyor, "undefined" olarak dönüyor.
JavaScript:
function GetText(Fl)
{
    File.readFile(Fl, "utf-8", function (err, data)
    {
        if (err)
        {
            throw err;
        }
        return data;
    });
}
 
Son düzenleme:
Async bir okuma yaptığınız için sonuç direkt dönmez. Promise yapısı olarak döner.
Ya .then() diyerek sonuc oluştuğu zaman çalışacak callback'i belirtirsiniz ya da 2019'da Javascript'e dahil olan async/await yapısını kullanırsınız.

Ya da async vs ile uğraşmamak için readFileSync kullanabilirsiniz.
 
Async bir okuma yaptığınız için sonuç direkt dönmez. Promise yapısı olarak döner.
Ya .then() diyerek sonuc oluştuğu zaman çalışacak callback'i belirtirsiniz ya da 2019'da Javascript'e dahil olan async/await yapısını kullanırsınız.

Ya da async vs ile uğraşmamak için readFileSync kullanabilirsiniz.
Aşağıdaki kodu test ettim.
JavaScript:
function GetText(Fl)
{
    File.readFileSync(Fl, "utf-8", function (err, data)
    {
        if (err)
        {
            throw err;
        }
        return data;
    });
}
Log(GetText("A.txt"));
Yine aynı sonucu veriyor.
 
Bu şekilde yazarsanız ben de "undefined" sonucu verirdim.

JavaScript:
const fs = require('fs');
const getText(path) => fs.readFileSync(path, 'utf-8');
 
Fonksiyon kullanılmayacak mı? 🤔
Zaten fonksiyon.
=> yapısını öğrenmenizi tavsiye ederim. ES6 ile function yazmanıza gerek yok.

Bkz;
JavaScript:
function doubler(a){
    return a * 2;
}

const doubler = (a) => a * 2;


 
Zaten fonksiyon.
=> yapısını öğrenmenizi tavsiye ederim. ES6 ile function yazmanıza gerek yok.

Bkz;
JavaScript:
function doubler(a){
    return a * 2;
}

const doubler = (a) => a * 2;


Bu sistemi çözmek için birçok yöntem denedim ve gecikme yöntemini kullanma kararı aldım. "setInterval" ekleyerek bir süre beklettikten sonra kodu çalıştırıyorum. Bu sayede değişken görünüyor. Ayrıca bir hata olması durumunda bu konuda da önlem aldık. Bununla birlikte oluşan değişkenleri temizliyoruz. Oldukça temiz ve performanslı geliştirdik. Bu konuda bir bilgi vereyim dedim.
 
Bence yanlış yapıyorsunuz. Bugün database hızlı çalışıyor, internet mükemmel hızlı hızlı bağlanıyorsunuzdur. Atıyorum 300, 400ms yetiyordur. Yarın alt yapı yavaşlar, 30 client aynı anda request atar. Yine atıyorum, cevap 2000ms sonra gelir. Sisteminiz beklenmedik sonuçlar doğurur.

Ki belli bir süre beklemek istiyorsanız setInterval değil setTimeout kullanmanız gerekir. Interval belli bir aralık boyunca clearInterval diyene kadar çalış demek.

Yapmanız gereken şey. Promies oluşturup. İşlem bitince Resolve(); method dışına da .Then(callback). Javascript'in temel yapısı bu şekildedir.


JavaScript:
let myPromise = new Promise(function(myResolve, myReject) {
  setTimeout(function() { myResolve("I love You !!"); }, 3000);
});

myPromise.then(function(value) {
  document.getElementById("demo").innerHTML = value;
});
 
Bence yanlış yapıyorsunuz. Bugün database hızlı çalışıyor, internet mükemmel hızlı hızlı bağlanıyorsunuzdur. Atıyorum 300, 400ms yetiyordur. Yarın alt yapı yavaşlar, 30 client aynı anda request atar. Yine atıyorum, cevap 2000ms sonra gelir. Sisteminiz beklenmedik sonuçlar doğurur.

Ki belli bir süre beklemek istiyorsanız setInterval değil setTimeout kullanmanız gerekir. Interval belli bir aralık boyunca clearInterval diyene kadar çalış demek.

Yapmanız gereken şey. Promies oluşturup. İşlem bitince Resolve(); method dışına da .Then(callback). Javascript'in temel yapısı bu şekildedir.


JavaScript:
let myPromise = new Promise(function(myResolve, myReject) {
  setTimeout(function() { myResolve("I love You !!"); }, 3000);
});

myPromise.then(function(value) {
  document.getElementById("demo").innerHTML = value;
});
Bu verdiğiniz sistemi de test ettim ama işe yaramadı. Yine boş değer dönüyor, senkronize olmuyor. Ben özel fonksiyon kullanıyorum ve bu belirttiğiniz sisteme özel değişken eklenmiyor. Ben zaten limitleme yapıp süre dolduktan sonra değişkeni siliyorum, yani sürekli çalışmıyor. Bu yöntemin benim kalabalık olmayan sistemim için yeterli olduğunu düşünüyorum.
 
Böyle bir kod deniyorum fakat "return" ekleyince değer dönmüyor, "undefined" olarak dönüyor.
JavaScript:
function GetText(Fl)
{
    File.readFile(Fl, "utf-8", function (err, data)
    {
        if (err)
        {
            throw err;
        }
        return data;
    });
}
File olarak tanımlanan değişkeni "fs" modülü olarak varsayarak aşağıdaki kodu dener misiniz?
JavaScript:
fs.readFile(__dirname, (err, data) => {
  if (err) throw err;
  return data;
});
veya
JavaScript:
const data = fs.readFile(__dirname);

return data;
Ayrıca JavaScript isimlendirme standartlarına (naming conventions) bakmanızı öneririm. Bu iki kaynağa bakabilirsiniz. JavaScript naming conventions: do’s and don’ts JavaScript Style Guide
 

Geri
Yukarı