Typescript/JavaScript-为什么我的承诺在我';你会解决吗?

Typescript/JavaScript-为什么我的承诺在我';你会解决吗?,javascript,typescript,promise,Javascript,Typescript,Promise,我有这个功能: export async function promisePlay(example: someInterface): Promise<string> { const data = await fetch(example.url) return new Promise((resolve, reject) => { resolve("Lets test this") console.log(&quo

我有这个功能:

export async function promisePlay(example: someInterface): Promise<string> {
    const data = await fetch(example.url)

    return new Promise((resolve, reject) => {
       resolve("Lets test this")

       console.log("This point shouldnt be reached");
    })
}
导出异步函数promisePlay(示例:someInterface):Promise{ const data=wait fetch(example.url) 返回新承诺((解决、拒绝)=>{ 解决(“让我们测试一下”) log(“不应到达此点”); }) } 运行此命令时,我看到控制台输出中的文本
不应达到此点。我想要(并且认为)的是
resolve()
应该返回并停止进一步运行

有人能告诉我我的误解是什么以及如何纠正吗


谢谢。

解析
是变量中的函数

您正在调用resolve函数并将promise的返回值作为参数传递

然而,这并没有停止执行或爆发

如果要退出函数,必须使用
return

调用
resolve
会停止调用原始函数的任何位置的挂起等待命令

无论您传递给return的值是什么,它都不会传递给解析承诺的变量,也不会停止wait命令中挂起的承诺

function test(yourWord) 
{
    return new Promise((resolve, reject) => 
    {
        // This will allow the command 
        // let res = await test("hello");
        // to continue executing. It will stop executing on that line
        // unless you call resolve or reject
        resolve("you said: " + yourWord);

        // this will continue to execute 
        console.log("I'm still alive");

        // this string return value will be ignored
        return "blah blah";

        // this will not be executed since the function has returned
        console.log("I'm dead");
    });
}

(async () => 
{
    // this will pause execution until resolve or reject is called and 
    // whatever value is passed into resolve() will be assigned to res
    let res = await test("hello");

    // this will echo out "you said hello"
    console.log("res: " + res);
})();
JS承诺已初始、履行和拒绝

等待承诺时,代码等待状态从
初始
更改为
拒绝
已解决
,然后继续执行

当您等待
promisePlay()
函数时,只要调用
reject()
resolve()
,等待后将继续执行

您的情况是特殊的,因为您在
之后有了代码,您在您的承诺范围内有了
解决()


在我自己的一些实验中,JS引擎似乎在执行
resolve()
之后等待所有代码的执行,我认为依赖这种行为是个坏主意,正如其他答案所建议的那样,您可能应该在
解析中返回所需的
结果
,您可以返回解析

  export async function promisePlay(example: someInterface): Promise<string> {
  const data = await fetch(example.url)

  return new Promise((resolve, reject) => {
   return resolve("Lets test this")

   console.log("This point shouldnt be reached");
  })
  }
导出异步函数promisePlay(示例:someInterface):Promise{ const data=wait fetch(example.url) 返回新承诺((解决、拒绝)=>{ 返回resolve(“让我们测试这个”) log(“不应到达此点”); }) }
承诺正文是同步的,当您解析承诺时,它不会返回(停止执行进一步的语句)

我认为你对承诺、决心和回报感到困惑

考虑下面的例子

新承诺((解决)=>{
控制台日志(“内部承诺”);
决定(“承诺已决定”);
console.log(“解析后”);

}).then(val=>console.log(val))让其他人批准,但我想,如果你等待promisePlay()。然后您可以保证代码在(解析)执行之前就已经执行,但这并不是说它不会继续执行?如果解析后有代码?因为
resolve()
调用不是
return
语句。如果您想
从函数返回
,请显式地编写它。@Bergi-所以您是说我不需要执行
resolve()
只需
返回'someString'
?任何“客户机”都不会收到返回的值(由executor函数返回)。executor函数中的
return
的唯一用途是结束函数的执行。不,它不起作用。相反,写
resolve(…);return
或just
return resolve(…)
因此,如果其中有一些条件语句,则需要多个
resolve('someString')后接
返回?我建议使用一个resolve和一个return,并将您希望传递给Wait的值作为conditions语句中的变量集,然后作为resolve(yourValue)传递;。返回不应该是这里的问题,op是在问其他问题。@AkshayBande他是在问为什么调用ResolveThank@John后函数没有停止执行-所以为了确认您的说法,
resolve('someString')
只是设置返回的内容。然而,使用
return
实际上停止了进一步的执行?这里的问题不应该是return,op是在问其他问题。