Javascript 如何在node.js中正确创建承诺
我目前正在做一个项目,我需要异步完成一些功能 我搜索了一下,发现承诺会起作用。这是我的密码:Javascript 如何在node.js中正确创建承诺,javascript,sql,node.js,promise,visual-studio-code,Javascript,Sql,Node.js,Promise,Visual Studio Code,我目前正在做一个项目,我需要异步完成一些功能 我搜索了一下,发现承诺会起作用。这是我的密码: var check = `SELECT * FROM change_name_spelling WHERE SID = ${SID}`; isSIDInDB = false; let promise1 = new Promise(function(resolve, reject) { con.query(check, function callback(err, result) {
var check = `SELECT * FROM change_name_spelling WHERE SID = ${SID}`;
isSIDInDB = false;
let promise1 = new Promise(function(resolve, reject) {
con.query(check, function callback(err, result) {
if (err) throw err;
console.log('length: ' + result.length);
const error = false;
if (!error) resolve(result.length);
else reject('Rejected');
});
promise1
.then(function(value) {
if (value > 0) {
isSIDInDB = true;
console.log('is db, from query, ' + isSIDInDB);
} else {
isSIDInDB = false;
console.log('is Not in db, from query, ' + isSIDInDB);
}
resolve(isSIDInDB);
reject();
})
.then(function(value) {
if (value) {
console.log('in db');
} else {
console.log('not in db');
}
});
}).catch(error, function() {
console.log(error);
});
但是,当我运行此代码时,出现以下错误:
1-未处理的PromisejectionWarning:ReferenceError:promise1未定义
2-未处理的PromisejectionWarning:未处理的承诺拒绝
3-未处理的PromisejectionWarning:ReferenceError:未定义错误
请注意,我已经使用命令“npm install promise”在VS代码中安装了promise包,但仍然收到相同的错误。我该怎么办?1。
您有promise1。然后(…)
在回调函数体中,它是promise1
定义的一部分,这就是您得到ReferenceError
的原因。基本上,在初始化变量时,您试图引用promise1
。移动promise1。然后(…)
到回调函数之外
#This is wrong
}).catch(error, function() {
console.log(error);
});
#This is right
}).catch( function(error) {
console.log(error);
});
二,。
在这段代码上,您有解析
和拒绝
:
resolve(isSIDInDB);
reject();
由于总是先调用resolve
,因此永远不会调用此reject
三,。
您需要将error
变量传递给回调函数
#This is wrong
}).catch(error, function() {
console.log(error);
});
#This is right
}).catch( function(error) {
console.log(error);
});
首先解决这个问题,看看还有什么错误
此外,您可能希望阅读承诺,以便更好地理解它们:
您正在promise1对象中使用promise构造函数本身。这就是
promise1
未定义错误的原因。另外,如其中一条评论所述,您不应该在
then
函数中使用resolve或reject函数。一旦您正确创建了promise1
对象,这些函数甚至都不可用
请将代码更改为如下所示,然后重试一次
var check = `SELECT * FROM change_name_spelling WHERE SID = ${SID}`;
isSIDInDB = false;
let promise1 = new Promise(function (resolve, reject) {
con.query(check, function callback(err, result) {
if (err) throw err;
console.log('length: ' + result.length);
const error = false;
if (!error) resolve(result.length);
else reject('Rejected');
})
});
promise1.then(function (value) {
if (value > 0) {
isSIDInDB = true;
console.log('is db, from query, ' + isSIDInDB);
} else {
isSIDInDB = false;
console.log('is Not in db, from query, ' + isSIDInDB);
}
if (isSIDInDB)
return isSIDInDB;
throw new Error(`not found`);
})
.then(function (value) {
if (value) {
console.log('in db');
} else {
console.log('not in db');
}
}).catch(error, function () {
console.log(error);
});
在一个
。然后承诺的方法中,你既不会拒绝也不会拒绝。您只需返回需要返回的任何内容。