Javascript 异步n承诺从快捷方式更改
我在一个示例中找到了以下代码,它们都在快捷方式中:Javascript 异步n承诺从快捷方式更改,javascript,async-await,es6-promise,Javascript,Async Await,Es6 Promise,我在一个示例中找到了以下代码,它们都在快捷方式中: async function test1(){ const p = await new Promise(resolve => setTimeout(resolve, 2000)).then(()=>'test1'); console.log('Completed test1'); return p; } 我想删除setTimeout,改为将其设置为非快捷方式,这样我可以向其添加多个命令,并执行超时之外的其他
async function test1(){
const p = await new Promise(resolve => setTimeout(resolve, 2000)).then(()=>'test1');
console.log('Completed test1');
return p;
}
我想删除setTimeout,改为将其设置为非快捷方式,这样我可以向其添加多个命令,并执行超时之外的其他操作
例如:
async function test1(){
const p = await new Promise(resolve => setTimeout(resolve) => {
// line here
// another one etc
}
如何更改上面的代码
async function test1(){
const p = await new Promise(resolve => setTimeout(resolve, 2000)).then(()=>'test1');
console.log('Completed test1');
return p;
}
我想你还没有完全理解这个代码<代码>设置超时不是快捷方式newpromise(resolve=>setTimeout(resolve,2000))
用于创建一个承诺,该承诺将在2000毫秒后解析。您可以将其视为一个API调用,它将在2000毫秒后调用回调
让我们打破这个密码:
// A function test1 which is defined async sow you can use await inside it
async function test1(){
// You can await for promises.
// As explained await new Promise(resolve => setTimeout(resolve, 2000))
// is just a promise resolving after 2000ms
const p = await new Promise(resolve => setTimeout(resolve, 2000))
// .then block will run after promise gets resolved
// p will bcome test1
.then(()=>'test1');
console.log('Completed test1');
return p;
}
如果您想有条件地解析承诺并进行一些计算,您可以在setTimeout函数中进行:
await new Promise(resolve =>
setTimeout(()=>{
if('Some consition'){
resolve('some value')
}
else{
resolve('some other value')
}
}, 2000)
)
但是为什么要使用async await,因为这里使用setTimeout只是为了模拟Promise几乎完美的功能,谢谢,但是如果我不想超时,而是想使用其他功能呢?例如resolve=>{//dosomethine here}这是完全错误的。promissions/async/await的思想是使用它们来等待解决。在这种情况下,使用setTimeout是错误的。我看到这一点的唯一方式是,如果这是一个模拟承诺执行2秒的示例。@我在这里编写的setTimeout宏就是模拟承诺,比如flow
,而不是使用其他承诺
->等待其他承诺执行其他承诺()