recherche

Maison  >  Questions et réponses  >  le corps du texte

javascript - la fonction nodejs renvoie un élément non défini, je ne comprends pas très bien pourquoi.

Promesse finalement utilisée pour résoudre le problème, le code est le suivant :
exports.selectByUsername = selectByUsername;
function selectByUsername(username){

var promise = new Promise(function(resolve){
    var sql = "SELECT COUNT(*) count FROM wx_user WHERE username = ?";
    var sqlParams = [username];
    var count;
    co.query(sql,sqlParams,function(err,result){
        if(err){
            return console.log(err.message);
        }
        console.log("------------------------开始查询---------------------");
        console.log(result);
        var str = JSON.stringify(result);
        var json = JSON.parse(str);
        count = json[0].count;
        console.log(count);
        console.log("------------------------查询结束---------------------");
        resolve(count);
    });
});
promise.then(function(value){
    // console.log(value);
    return value;
});
return promise;

}

app.post('/ajax',urlencodedParser,function(req,res){

username = req.body.name;
console.log(username);
var promise = s.selectByUsername(username);
promise.then(function(value){
    console.log(value);
    if(value!==1){
        res.send("用户名不存在");
    }
});

});

Document de référence : http://liubin.org/promises-book/

为情所困为情所困2801 Il y a quelques jours947

répondre à tous(3)je répondrai

  • 天蓬老师

    天蓬老师2017-05-16 13:34:46

    La fonction dans la requête ne sera pas exécutée tant que la requête n'est pas terminée, et à ce moment-là, la fonction externe est revenue, donc le nombre ne se verra pas attribuer de valeur et n'est toujours pas défini

    répondre
    0
  • 给我你的怀抱

    给我你的怀抱2017-05-16 13:34:46

    L'écrire dans une requête ne renverra pas le nombre, car la méthode de requête est asynchrone

    répondre
    0
  • 我想大声告诉你

    我想大声告诉你2017-05-16 13:34:46

    En bref, écrivez simplement le nombre de retours dans la requête.

    répondre
    0
  • Annulerrépondre