j'utilise web sql et je souhaite retourner la date, et ne vois pas comment...
Désolé, je ne connais pas bien web sql...
je ne me souviens plus du tout du scope d'une variable dans ce cas... faut il mettre "var now; " ou "now;" tout court ?
...mais si ça peut aider, voici un petit test de portée :
function higherDef() { var test_1 = test_2 = test_3 = "high"; function lowerDef() { var test_1 = "low"; test_2 = "low"; test_3 = test_1; } lowerDef(); console.log( "test_1 is still " + test_1 + " level definedn" + "test_2 is now " + test_2 + " level definedn" + "test_3 is also " + test_3 + " level defined" ); } higherDef();
-- Cordialement, Pascal
Bol
le script : function read_date_now(db){ var now;
var now = "trop tot";
db.transaction( function(t){ now="inner function(t)"; t.executeSql("SELECT date('now') as now;", [], function(t,r){ now=r.rows.item(0).now; // <= là j'ai la bonne valeur return now; }, function(t,e){alert('Error:'+e.message);} ); alert(now); // <= là j'ai 'undefined'
tu devrais avoir "trop tot";
return now; } ); return now; }
je ne me souviens plus du tout du scope d'une variable dans ce cas... faut il mettre "var now; " ou "now;" tout court ?
AMHA c'est pas une question de scope mais plutot de timing, s'il y a des callback pour transaction et executeSql c'est très probablement qu'elles sont asynchrones
Pour voir dans l'autre sens, essaye :
function read_date_now(db){ var now;
var tutut = 'top depart';
db.transaction( function(t){ now="inner function(t)"; t.executeSql("SELECT date('now') as now;", [], function(t,r){ now=r.rows.item(0).now; // <= là j'ai la bonne valeur
alert( tutut ); // <= AMHA tu auras "trop tard" // défini après l'appel de db.transaction
db.transaction(
function(t){
now="inner function(t)";
t.executeSql("SELECT date('now') as now;", [],
function(t,r){
now=r.rows.item(0).now; // <= là j'ai la bonne valeur
return now;
},
function(t,e){alert('Error:'+e.message);}
);
alert(now); // <= là j'ai 'undefined'
tu devrais avoir "trop tot";
return now;
}
);
return now;
}
je ne me souviens plus du tout du scope d'une variable dans ce cas...
faut il mettre "var now; " ou "now;" tout court ?
AMHA c'est pas une question de scope mais plutot de timing,
s'il y a des callback pour transaction et executeSql c'est très
probablement qu'elles sont asynchrones
Pour voir dans l'autre sens, essaye :
function read_date_now(db){
var now;
var tutut = 'top depart';
db.transaction(
function(t){
now="inner function(t)";
t.executeSql("SELECT date('now') as now;", [],
function(t,r){
now=r.rows.item(0).now; // <= là j'ai la bonne valeur
alert( tutut ); // <= AMHA tu auras "trop tard"
// défini après l'appel de db.transaction
db.transaction( function(t){ now="inner function(t)"; t.executeSql("SELECT date('now') as now;", [], function(t,r){ now=r.rows.item(0).now; // <= là j'ai la bonne valeur return now; }, function(t,e){alert('Error:'+e.message);} ); alert(now); // <= là j'ai 'undefined'
tu devrais avoir "trop tot";
return now; } ); return now; }
je ne me souviens plus du tout du scope d'une variable dans ce cas... faut il mettre "var now; " ou "now;" tout court ?
AMHA c'est pas une question de scope mais plutot de timing, s'il y a des callback pour transaction et executeSql c'est très probablement qu'elles sont asynchrones
Pour voir dans l'autre sens, essaye :
function read_date_now(db){ var now;
var tutut = 'top depart';
db.transaction( function(t){ now="inner function(t)"; t.executeSql("SELECT date('now') as now;", [], function(t,r){ now=r.rows.item(0).now; // <= là j'ai la bonne valeur
alert( tutut ); // <= AMHA tu auras "trop tard" // défini après l'appel de db.transaction
Pas grave, le pb ne vient pas de là car ma ligne : now=r.rows.item(0).now; donne bien la valeur su select qui a précédé, par contre je n'arrive pas à retourner cette valeur...
> je ne me souviens plus du tout du scope d'une variable dans ce cas... > faut il mettre "var now; " ou "now;" tout court ?
...mais si ça peut aider, voici un petit test de portée :
function higherDef() { var test_1 = test_2 = test_3 = "high"; function lowerDef() { var test_1 = "low"; test_2 = "low"; test_3 = test_1; } lowerDef(); console.log( "test_1 is still " + test_1 + " level definedn" + "test_2 is now " + test_2 + " level definedn" + "test_3 is also " + test_3 + " level defined" ); } higherDef();
Oui, c'est bien ce que je pensais, dans "lowerDef()" la variable "test_1" est locale, donc n'affecte pas la valeur de "test_1" dans "higherDef()" et donc à la console on a : test 1 high test 2 low test 3 low
je m'attendais à ça, MAIS dans mon cas : function read_date_now(db){ var now='truc'; db.transaction( function(t){ now="inner function(t)"; t.executeSql("SELECT date('now') as now;", [], function(t,r){ now=r.rows.item(0).now; alert(row); }, function(t,e){alert('Error:'+e.message);} ); } ); return now; }
je m'attends à ce que la valeur retournée soit la valeur de r.rows.item(0).now soit "2011-07-08" MAIS ça me donne "truc", même pas "inner function(t)"...
d'ailleurs il y a quelque chose de bizarre si je met un alert(now) après la ligne now=r.rows.item(0).now; et que j'appelle ma fonction par : alert(read_date_now(db));
je n'ai qu'UN alert, qui me donne "truc" si, par contre, j'zappelle ma fonction par : read_date_now(db); l'alert(row) après la ligne now=r.rows.item(0).now; me donne la bonne valeur...
tout se passe "comme si" je ne pouvais avoir qu'un alert()...
j'ai aussi essayé avec window.now=... donne que dalle... -- « Face au monde qui bouge, il vaut mieux penser le changement que changer le pansement ! » (Francis Blanche)
Pas grave, le pb ne vient pas de là car ma ligne :
now=r.rows.item(0).now;
donne bien la valeur su select qui a précédé, par contre je n'arrive pas
à retourner cette valeur...
> je ne me souviens plus du tout du scope d'une variable dans ce cas...
> faut il mettre "var now; " ou "now;" tout court ?
...mais si ça peut aider, voici un petit test de portée :
function higherDef() {
var test_1 = test_2 = test_3 = "high";
function lowerDef() {
var test_1 = "low";
test_2 = "low";
test_3 = test_1;
}
lowerDef();
console.log(
"test_1 is still " + test_1 + " level definedn" +
"test_2 is now " + test_2 + " level definedn" +
"test_3 is also " + test_3 + " level defined"
);
}
higherDef();
Oui, c'est bien ce que je pensais, dans "lowerDef()" la variable
"test_1" est locale, donc n'affecte pas la valeur de "test_1" dans
"higherDef()" et donc à la console on a :
test 1 high
test 2 low
test 3 low
je m'attendais à ça, MAIS dans mon cas :
function read_date_now(db){
var now='truc';
db.transaction(
function(t){
now="inner function(t)";
t.executeSql("SELECT date('now') as now;", [],
function(t,r){
now=r.rows.item(0).now;
alert(row);
},
function(t,e){alert('Error:'+e.message);}
);
}
);
return now;
}
je m'attends à ce que la valeur retournée soit la valeur de
r.rows.item(0).now soit "2011-07-08"
MAIS ça me donne "truc", même pas "inner function(t)"...
d'ailleurs il y a quelque chose de bizarre
si je met un alert(now) après la ligne now=r.rows.item(0).now;
et que j'appelle ma fonction par :
alert(read_date_now(db));
je n'ai qu'UN alert, qui me donne "truc" si, par contre, j'zappelle ma
fonction par :
read_date_now(db);
l'alert(row) après la ligne now=r.rows.item(0).now; me donne la bonne
valeur...
tout se passe "comme si" je ne pouvais avoir qu'un alert()...
j'ai aussi essayé avec window.now=... donne que dalle...
--
« Face au monde qui bouge, il vaut mieux penser le changement
que changer le pansement ! »
(Francis Blanche)
Pas grave, le pb ne vient pas de là car ma ligne : now=r.rows.item(0).now; donne bien la valeur su select qui a précédé, par contre je n'arrive pas à retourner cette valeur...
> je ne me souviens plus du tout du scope d'une variable dans ce cas... > faut il mettre "var now; " ou "now;" tout court ?
...mais si ça peut aider, voici un petit test de portée :
function higherDef() { var test_1 = test_2 = test_3 = "high"; function lowerDef() { var test_1 = "low"; test_2 = "low"; test_3 = test_1; } lowerDef(); console.log( "test_1 is still " + test_1 + " level definedn" + "test_2 is now " + test_2 + " level definedn" + "test_3 is also " + test_3 + " level defined" ); } higherDef();
Oui, c'est bien ce que je pensais, dans "lowerDef()" la variable "test_1" est locale, donc n'affecte pas la valeur de "test_1" dans "higherDef()" et donc à la console on a : test 1 high test 2 low test 3 low
je m'attendais à ça, MAIS dans mon cas : function read_date_now(db){ var now='truc'; db.transaction( function(t){ now="inner function(t)"; t.executeSql("SELECT date('now') as now;", [], function(t,r){ now=r.rows.item(0).now; alert(row); }, function(t,e){alert('Error:'+e.message);} ); } ); return now; }
je m'attends à ce que la valeur retournée soit la valeur de r.rows.item(0).now soit "2011-07-08" MAIS ça me donne "truc", même pas "inner function(t)"...
d'ailleurs il y a quelque chose de bizarre si je met un alert(now) après la ligne now=r.rows.item(0).now; et que j'appelle ma fonction par : alert(read_date_now(db));
je n'ai qu'UN alert, qui me donne "truc" si, par contre, j'zappelle ma fonction par : read_date_now(db); l'alert(row) après la ligne now=r.rows.item(0).now; me donne la bonne valeur...
tout se passe "comme si" je ne pouvais avoir qu'un alert()...
j'ai aussi essayé avec window.now=... donne que dalle... -- « Face au monde qui bouge, il vaut mieux penser le changement que changer le pansement ! » (Francis Blanche)
unbewusst.sein
Bol wrote:
> le script : > function read_date_now(db){ > var now;
NON, mais c'est intéressant, là j'ai "inner function(t)" (cf. ***)
> return now; > } > ); > return now; > } > > je ne me souviens plus du tout du scope d'une variable dans ce cas... > faut il mettre "var now; " ou "now;" tout court ?
AMHA c'est pas une question de scope mais plutot de timing, s'il y a des callback pour transaction et executeSql c'est très probablement qu'elles sont asynchrones
ben oui, ah d'accord, oui, je vois ce que tu veux dire, la fonction read_date_now(db) peut retourner AVANT que le résultat de : t.executeSql("SELECT date('now') as now;",... soit obtenu, ah oui, ça j'y crois fort. Bien sûr avant de poster ici j'ai farfouiller sur le net... pas un seul exemple où il y ait une fonction retournant une valeur, les seuls exemples trouvés modifient le html; ce qui asynchrone...
Pour voir dans l'autre sens, essaye :
> function read_date_now(db){ > var now;
var tutut = 'top depart';
> db.transaction( > function(t){ > now="inner function(t)"; > t.executeSql("SELECT date('now') as now;", [], > function(t,r){ > now=r.rows.item(0).now; // <= là j'ai la bonne valeur
alert( tutut ); // <= AMHA tu auras "trop tard" // défini après l'appel de db.transaction
NON, mais c'est intéressant, là j'ai "inner function(t)" (cf. ***)
> return now;
> }
> );
> return now;
> }
>
> je ne me souviens plus du tout du scope d'une variable dans ce cas...
> faut il mettre "var now; " ou "now;" tout court ?
AMHA c'est pas une question de scope mais plutot de timing,
s'il y a des callback pour transaction et executeSql c'est très
probablement qu'elles sont asynchrones
ben oui, ah d'accord, oui, je vois ce que tu veux dire, la fonction
read_date_now(db) peut retourner AVANT que le résultat de :
t.executeSql("SELECT date('now') as now;",...
soit obtenu, ah oui, ça j'y crois fort.
Bien sûr avant de poster ici j'ai farfouiller sur le net... pas un seul
exemple où il y ait une fonction retournant une valeur, les seuls
exemples trouvés modifient le html; ce qui asynchrone...
Pour voir dans l'autre sens, essaye :
> function read_date_now(db){
> var now;
var tutut = 'top depart';
> db.transaction(
> function(t){
> now="inner function(t)";
> t.executeSql("SELECT date('now') as now;", [],
> function(t,r){
> now=r.rows.item(0).now; // <= là j'ai la bonne valeur
alert( tutut ); // <= AMHA tu auras "trop tard"
// défini après l'appel de db.transaction
NON, mais c'est intéressant, là j'ai "inner function(t)" (cf. ***)
> return now; > } > ); > return now; > } > > je ne me souviens plus du tout du scope d'une variable dans ce cas... > faut il mettre "var now; " ou "now;" tout court ?
AMHA c'est pas une question de scope mais plutot de timing, s'il y a des callback pour transaction et executeSql c'est très probablement qu'elles sont asynchrones
ben oui, ah d'accord, oui, je vois ce que tu veux dire, la fonction read_date_now(db) peut retourner AVANT que le résultat de : t.executeSql("SELECT date('now') as now;",... soit obtenu, ah oui, ça j'y crois fort. Bien sûr avant de poster ici j'ai farfouiller sur le net... pas un seul exemple où il y ait une fonction retournant une valeur, les seuls exemples trouvés modifient le html; ce qui asynchrone...
Pour voir dans l'autre sens, essaye :
> function read_date_now(db){ > var now;
var tutut = 'top depart';
> db.transaction( > function(t){ > now="inner function(t)"; > t.executeSql("SELECT date('now') as now;", [], > function(t,r){ > now=r.rows.item(0).now; // <= là j'ai la bonne valeur
alert( tutut ); // <= AMHA tu auras "trop tard" // défini après l'appel de db.transaction
s'il y a des callback pour transaction et executeSql c'est très probablement qu'elles sont asynchrones
OUAIS, BRAVO, c'est bien ça... ce n'est donc pas du tout une question de scope... tu as vu juste.
ben là, ce que je peux faire, c'est une boucle while du genre :
while(now == 'undefined') wait a moment please end
AMHA, il faut le faire avec un setTimeout pour que ta fonction d'attente soit aussi désynchronisée
A+ Bol
unbewusst.sein
Bol wrote:
AMHA, il faut le faire avec un setTimeout pour que ta fonction d'attente soit aussi désynchronisée
Exact, c'est ce que je viens de faire (mal sans doute) : function read_date_now(db){ var now; db.transaction( function(t){ t.executeSql("SELECT date('now') as now;", [], function(t,r){ now=r.rows.item(0).now; }, function(t,e){alert('Error:'+e.message);} ); } ); function update() { while (typeof(now)=='undefined') { // update ... setTimeout("update", 100); } } return now; }
j'ai du mal me dépatouiller, car ça sort tout de suite par un 'undefined'... là, je pense que read_date_now(db) retourne quand update() boucle sur lui même... -- « Face au monde qui bouge, il vaut mieux penser le changement que changer le pansement ! » (Francis Blanche)
Bol <Bol@wanadoo.fr> wrote:
AMHA, il faut le faire avec un setTimeout
pour que ta fonction d'attente soit aussi désynchronisée
Exact, c'est ce que je viens de faire (mal sans doute) :
function read_date_now(db){
var now;
db.transaction(
function(t){
t.executeSql("SELECT date('now') as now;", [],
function(t,r){
now=r.rows.item(0).now;
},
function(t,e){alert('Error:'+e.message);}
);
}
);
function update() {
while (typeof(now)=='undefined') {
// update ...
setTimeout("update", 100);
}
}
return now;
}
j'ai du mal me dépatouiller, car ça sort tout de suite par un
'undefined'...
là, je pense que read_date_now(db) retourne quand update() boucle sur
lui même...
--
« Face au monde qui bouge, il vaut mieux penser le changement
que changer le pansement ! »
(Francis Blanche)
AMHA, il faut le faire avec un setTimeout pour que ta fonction d'attente soit aussi désynchronisée
Exact, c'est ce que je viens de faire (mal sans doute) : function read_date_now(db){ var now; db.transaction( function(t){ t.executeSql("SELECT date('now') as now;", [], function(t,r){ now=r.rows.item(0).now; }, function(t,e){alert('Error:'+e.message);} ); } ); function update() { while (typeof(now)=='undefined') { // update ... setTimeout("update", 100); } } return now; }
j'ai du mal me dépatouiller, car ça sort tout de suite par un 'undefined'... là, je pense que read_date_now(db) retourne quand update() boucle sur lui même... -- « Face au monde qui bouge, il vaut mieux penser le changement que changer le pansement ! » (Francis Blanche)
Pascal Poncet
Le 08/07/2011 13:29, Une Bévue a écrit :
Bien sûr avant de poster ici j'ai farfouiller sur le net... pas un seul exemple où il y ait une fonction retournant une valeur, les seuls exemples trouvés modifient le html; ce qui asynchrone...
Peut-être que ce lien pourra te donner un bon tuyau, car il semble que le même genre de problème ait été rencontré :
Bien sûr avant de poster ici j'ai farfouiller sur le net... pas un seul
exemple où il y ait une fonction retournant une valeur, les seuls
exemples trouvés modifient le html; ce qui asynchrone...
Peut-être que ce lien pourra te donner un bon tuyau, car il semble que
le même genre de problème ait été rencontré :
Bien sûr avant de poster ici j'ai farfouiller sur le net... pas un seul exemple où il y ait une fonction retournant une valeur, les seuls exemples trouvés modifient le html; ce qui asynchrone...
Peut-être que ce lien pourra te donner un bon tuyau, car il semble que le même genre de problème ait été rencontré :
<http://experimenting.in/other/demo_websql.htm> un bon exemple
Relation avec JavaScript ?
ben dans le butineur il y a une implémentation d'une interface SQLite vers javascript.
ç roule très bien, attention c'est du client)side. -- « Face au monde qui bouge, il vaut mieux penser le changement que changer le pansement ! » (Francis Blanche)
<http://experimenting.in/other/demo_websql.htm>
un bon exemple
Relation avec JavaScript ?
ben dans le butineur il y a une implémentation d'une interface SQLite
vers javascript.
ç roule très bien, attention c'est du client)side.
--
« Face au monde qui bouge, il vaut mieux penser le changement
que changer le pansement ! »
(Francis Blanche)
<http://experimenting.in/other/demo_websql.htm> un bon exemple
Relation avec JavaScript ?
ben dans le butineur il y a une implémentation d'une interface SQLite vers javascript.
ç roule très bien, attention c'est du client)side. -- « Face au monde qui bouge, il vaut mieux penser le changement que changer le pansement ! » (Francis Blanche)