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
或justreturn resolve(…)
因此,如果其中有一些条件语句,则需要多个resolve('someString')代码>后接返回代码>?我建议使用一个resolve和一个return,并将您希望传递给Wait的值作为conditions语句中的变量集,然后作为resolve(yourValue)传递;。返回不应该是这里的问题,op是在问其他问题。@AkshayBande他是在问为什么调用ResolveThank@John后函数没有停止执行-所以为了确认您的说法,resolve('someString')
只是设置返回的内容。然而,使用return
实际上停止了进一步的执行?这里的问题不应该是return,op是在问其他问题。