返回 Promise Pending 的函数值
Posted
技术标签:
【中文标题】返回 Promise Pending 的函数值【英文标题】:Function value returning Promise Pending [duplicate] 【发布时间】:2019-12-23 05:40:22 【问题描述】:有人可以帮我为什么我下面的代码会为 out 变量返回 Promise 挂起值吗?
var out = dbConn.connect().then(function ()
var request = new sql.Request(dbConn);
request.input("terminalId", sql.VarChar, terminalID).query("SELECT terminalContextKey from device_context where terminalId = @terminalId").then(function (result, recordSet)
dbConn.close();
finalterminalkey = result.recordset[0].terminalContextKey;
console.dir(JSON.stringify(finalterminalkey));
Promise.resolve(recordSet);
return JSON.stringify(finalterminalkey);
).catch(function (err)
console.log(err);
dbConn.close();
);
).catch(function (err)
console.log(err);
);
console.dir(out);
return out;
【问题讨论】:
这对我们来说太宽泛了。 “为什么我的代码做 X”问题对于 Stack Overflow 来说是题外话,没有研究。 @zix 通常我不会在代码格式类型之间进行更改,但我想这是因为在这种情况下有 6 个字符的限制。 从.then()
中返回的任何内容都将产生一个新的承诺。将JSON.stringify(finalterminalkey)
分配给全局范围内的变量。
Why is my asynchronous function returning Promise <pending> instead of a value? 的可能重复项(假设您没有问为什么它不是 promise-resolved)
我尝试分配给全局变量,但它返回了我分配的内容。假设 null 或 ""
【参考方案1】:
.then
和 .catch
都返回对新承诺的引用。这就是为什么你可以链接它们。因为您可能在调用 Promise 后立即记录它,所以它还没有解决并且仍然处于挂起状态。 This 是一个很好的资源,可以了解 Promise 是如何工作的。
【讨论】:
【参考方案2】:javascript Promise
就像一个现实生活中的承诺。我举个例子:
Person A
承诺Person B
从商店买牛奶。
现在Person A
必须等待Person B
才能获得牛奶。 Person A
不知道牛奶什么时候到,或者牛奶永远不会到。
JavaScript Promises
也是如此。它们最终会解决,但它们也可能引发错误。在这种情况下,您放入catch()
的代码将用于“捕获”错误。如果他们解决了,他们将运行then()
中的代码。
您的变量out
是一个承诺。你必须把你的逻辑放在then()
或catch()
。
当您返回 out
时,JavaScript 不知道 Promise
是否已经准备好/已解决。
【讨论】:
我会接受这个答案。几乎足够接近。你能指出我在做什么吗? var out = dbConn.connect().then(function () var request = new sql.Request(dbConn); request.input("terminalId", sql.VarChar, terminalID)。 query("SELECT terminalContextKey from device_context where terminalId = @terminalId") .then(function (out, err) dbConn.close(); finalterminalkey = out.recordset[0].terminalContextKey; //console.dir(JSON.stringify (finalterminalkey)); ) );退出; 【参考方案3】:您必须使用.then
和.catch
语句,但它们返回一个新的promise 而不是原来的promise。不过,他们会很好。您可以检查副本以获取更多参考。当您使用out
时,如果您使用.then
语句(即promise 已解决时)和.catch
语句(即promise 失败时),则promise 尚未解决。
【讨论】:
以上是关于返回 Promise Pending 的函数值的主要内容,如果未能解决你的问题,请参考以下文章
Promise 返回 undefined 和 status pending
useState 与异步函数返回 Promise <pending>