首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >为什么这个承诺从来没有实现过?(Chrome中的简单JavaScript )

为什么这个承诺从来没有实现过?(Chrome中的简单JavaScript )
EN

Stack Overflow用户
提问于 2022-09-06 04:56:14
回答 2查看 47关注 0票数 1
代码语言:javascript
复制
async function test(){
  setTimeout(function(){return 1}, 100)
};
test().then(console.log); // Never displayed

如果删除了setTimeout包装,它可以工作:

代码语言:javascript
复制
async function test(){
  return 1;
};
test().then(console.log); // Displayed
EN

回答 2

Stack Overflow用户

发布于 2022-09-06 05:22:34

首先,您忘记了test函数中的返回语句。如果没有返回语句,该函数将返回一个解析为Promiseundefined

第二,setTimeout不返回承诺。相反,您必须显式地创建它。

应该是这样的。

代码语言:javascript
复制
async function test() {
  return new Promise((resolve) => setTimeout(() => resolve(1), 100))
}

但是您的代码等价于以下内容,因为您没有以任何方式使用setTimeout

代码语言:javascript
复制
async function test() {
  return undefined
}

创建异步函数有两个选项。历史上,第一个函数接受回调。第二个选项是从函数返回一个承诺。

许多库函数接受回调,并在发生异步事件时调用回调。这样一个函数的一个例子是setTimeout

要使用接受await回调的函数,可以将其包装在一个新的承诺中。

例如,我们有一个库函数libFunc(..., callback),其中callback是一个接受一些参数的函数。

你可以像这样创造新的承诺。

代码语言:javascript
复制
const result = await new Promise(
  (resolve) => libFunc(/*some arguments*/,
    (callbackArg) => resolve(callbackArg)))

你可以查看我关于JavaScript中回调的异步函数主题的帖子

票数 2
EN

Stack Overflow用户

发布于 2022-09-06 05:20:44

下面的函数不返回任何内容。它也不是一个承诺,它将用一个价值来解决。它只是一个函数,它为一个函数设置一个定时器,这个函数(将在窗口的上下文中运行)并返回1。返回的值在任何地方都不会被捕获。

代码语言:javascript
复制
async function test(){
  setTimeout(function(){return 1}, 100)
};

要从setTimeout访问值,您必须将其包装在一个承诺中,并让允诺与该值一起解析。

代码语言:javascript
复制
async function test(){
  return new Promise((resolve,reject) => setTimeout(function(){resolve(1);}, 100));
};
test().then(console.log);


async function test2(){
  return 1;
};
test2().then(console.log); // Displayed

另一种不使用承诺访问setTimeout内部值的方法是传递回调,如下所示。

代码语言:javascript
复制
async function test(callback){
  setTimeout(function(){callback(1)}, 100)
};
test(console.log);

上面的代码说明了为什么使用承诺更容易对代码进行推理。您想要访问值的任何代码段(从setTimeout内部)都必须在回调中。这会变得很混乱

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/73616868

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档