我有一个问题。我正在做一个数据库调用收集Id从订单我有我的数据库,然后我想使用承诺返回该订单的Id,因为数据库调用是异步的。我做了以下承诺:
function getNextOrderId() {
return new Promise(function(resolve, reject) {
orderIdSelected = 0;
var sql = `
SELECT *
FROM Orders
WHERE userId=5
`;
conn.query(sql, function(err, rows, fields) {
if (err) throw err;
var length1 = Object.keys(rows).length;
LogToConsole("length1="+length1);
i1 = 0
while (i1 < length1 && orderIdSelected == 0) {
var OrderId = rows[i1].Id;
LogToConsole("OrderId="+OrderId);
if (OrderId == 1134881) {
orderIdSelected = OrderId;
LogToConsole("orderIdSelected end="+orderIdSelected);
resolve(toString(orderIdSelected));
}
i1++;
}
});
});
}
然后我像下面这样调用承诺:
getNextOrderId().then(function(nextOrderId) {
LogToConsole(nextOrderId);
}).catch((err) => setImmediate(() => { throw err; }));
但是nextOrderId是[Object Undefined]
,它在promise函数返回之前有一个值。打印:LogToConsole("orderIdSelected end="+orderIdSelected);
给出:orderIdSelected end=1134881
....出了什么问题,我该如何解决?
toString(1134881)
给出"[object Undefined]"
仅resolve(orderIdSelected);
或resolve(orderIdSelected.toString());
toString
的更多细节在这里