我的问题是:用“async”定义一个返回“promise”的函数(形式上)正确吗?是否容易出现“内存泄漏”?
//Said in plain JavaScript: is the below function correctly declared?
async function amICorrect(){
return new Promise(() => {}, () => {});
}
// - - - - - - - - - - - - - - - - - - - - - - - - - - //
// Why this question? Look at these js functions:
// - - - - - - - - - - - - - - - - - - - - - - - - - - //
// This function is useless, but it is formally correct.
function testS(){}
var s = testS();
alert(isPromise(s));
// in this case 'isPromise' returns 'false' and that is correct.
// 'async' change the same signature returning a 'Promise' object.
async function testA(){}
var a = testA();
alert(isPromise(a));
// Now 'isPromise' returns 'true'. That proves 'async' change the return value from void (in this case) to 'Promise';
// Now we are ready to get why the original question was made:
// Is this signature prone to 'memory leakage'?
// (when the 'Promise' generated by 'async' replaces the returning 'Promise')
async function amICorrect(){
return new Promise(() => {}, () => {});
}
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
// Who knows how the js engine manages this 'configuration'?
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
// Is the above signature correct or should it be the following?
// (without the 'async' because not needed)
function IAmCorrect(){
return new Promise(() => {}, () => {});
}
function isPromise(value){
return ((typeof value) == (typeof new Promise(() => {}, () => {})));
}
对于那些喜欢用自然语言阅读我用js发布的内容的人。
我正在给一个知道JS是如何真正实现的人打电话,然后知道引擎是如何管理我提出的场景的:我们应该避免对返回“promise”的函数使用“async”吗?
我提出的问题不会改变任何人的生活,最终也不会影响表演。事实是,在编写代码时,我喜欢关注代码的正确性,这是我前一段时间的一个疑问。享受
会有用的,但不是个好主意。
通常,您应该以这两种形式中的任何一种编写异步函数:
/* new style */
async function check(arg) {
if (arg > 0) {
return arg;
} else {
throw new Error(arg);
}
}
/* old style */
function check(arg) {
return new Promise((accept, reject) => {
if (arg > 0)
accept(arg);
else
reject(new Error(arg));
});
}
前者可以被认为是后者的简单语法糖:它们是等价的。两者也可以以相同的方式使用:await
关键字完全等同于调用.then
方法。
如果你把这些形式混合在一起,它仍然会起作用,这要感谢自动的承诺扁平化。有些人认为扁平化是ECMAScript中的一个设计错误,它肯定会导致一些陷阱,正如(已放弃的)symbol.thenable
建议中所讨论的那样。
问题内容: 我做了异步。现在我可以使用了。 这是示例代码: 所以这里的问题是回报承诺,因为我可以使用它吗? 编辑 当我等待时,它将按顺序运行;当我删除等待时,它将运行? 问题答案: 通常不与promises一起使用,因为很少有这种需求。如果在状态更新()之后调用的方法依赖于更新的状态(),则它可以通过其他方式(例如,作为参数)访问它。 使用回调并且不返回承诺。由于很少需要这样做,因此创建未使用的承
所以我一直很高兴地使用async/await,因为Firebase云函数支持节点8。不过我有一件事要做。当使用可调用函数时,会告诉您必须在函数中返回promise,否则它将无法正常工作。当使用原始promise时,我很清楚如何使用它: 但是现在,随着异步等待,我不确定如何返回这个“promise链”: 有人知道吗?
如果找不到记录,则必须为 api/对象返回哪个 HTTP 状态?我看到以下变体: 返回404 返回200和空白响应,例如{} 我没有找到ruby社区的惯例。什么是最佳实践?
我试图了解异步/等待如何与promise一起工作。 据我所知,await应该是阻塞的,在上面的代码中,它似乎阻塞了返回带有原语
在Python中编写不返回值的类型化函数(如其他语言中的“void”)时,最好和/或约定将其标记为以下内容? 或者,是否应该省略
函数getfile: 但我需要一个数组而不是这个promise的东西。怎么解决?