为什么 Promise 不使用 setTimeout 显示数据?
Why Promise is not displaying the data with setTimeout?
我编写了一个函数来在 500 毫秒后获取一个随机数,它与 (return new Promise (resolve,reject)
) 完美配合,而且,它在没有它的情况下使用 setTimeout()
函数也能正常工作,但是当我添加里面的 promise 和 setTimeout()
不会显示结果,我在结果前后都有 console.log()
并且都显示了。请注意,我对 promise 概念总体上还是陌生的,因为这是我的编码学校的任务,谢谢。
我的代码:
function getRandomNumber () {
new Promise ((resolve,reject) =>{
console.log('Getting Random Number...');
let number = Math.random();
setTimeout( () => {
if(number){
resolve (`OK ${number}`);
console.log('Done!');
}
else
reject ('ERROR');
}, 500);
});
}
getRandomNumber();
结果:
首先,return 你的承诺,其次使用承诺提供的结果,方法是从它创建一个变量并等待它或使用 then
function getRandomNumber() {
return new Promise((resolve, reject) => {
console.log('Getting Random Number...');
let number = Math.random();
setTimeout(() => {
if (number) {
resolve(`OK ${number}`);
console.log('Done!');
} else {
reject('ERROR');
}
}, 500);
});
}
getRandomNumber().then(result => console.log(result));
(async () => {
const number = await getRandomNumber();
console.log(number);
})();
另一种选择是将sleep
编写为单独的可重用函数。注意 async
函数可以 await
多个值和 return
个值。调用 async
函数将 总是 return Promise -
function sleep(time) {
return new Promise(resolve => setTimeout(resolve, time))
}
async function getRandomNumber() {
console.log('Getting Random Number...')
await sleep(500)
const number = Math.random()
console.log("Done!")
return number
}
async function main() {
const number1 = await getRandomNumber()
console.log("number1", number1)
const number2 = await getRandomNumber()
console.log("number1", number2)
const number3 = await getRandomNumber()
console.log("number1", number3)
return number1 + number2 + number3
}
main().then(console.log, console.error)
.as-console-wrapper { min-height: 100%; }
Getting Random Number...
Done!
number1 0.2907058138817884
Getting Random Number...
Done!
number1 0.05784624607512423
Getting Random Number...
Done!
number1 0.889702848981964
1.2382549089388766
您需要 return 承诺,然后您可以在 async
函数中使用 await
来获取结果
function getRandomNumber () {
return new Promise ((resolve,reject) =>{
console.log('Getting Random Number...');
let number = Math.random();
setTimeout( () => {
if(number){
resolve (`OK ${number}`);
console.log('Done!');
}
else
reject ('ERROR');
}, 500);
});
}
const printNumber = async () => console.log(await getRandomNumber());
printNumber();
我编写了一个函数来在 500 毫秒后获取一个随机数,它与 (return new Promise (resolve,reject)
) 完美配合,而且,它在没有它的情况下使用 setTimeout()
函数也能正常工作,但是当我添加里面的 promise 和 setTimeout()
不会显示结果,我在结果前后都有 console.log()
并且都显示了。请注意,我对 promise 概念总体上还是陌生的,因为这是我的编码学校的任务,谢谢。
我的代码:
function getRandomNumber () {
new Promise ((resolve,reject) =>{
console.log('Getting Random Number...');
let number = Math.random();
setTimeout( () => {
if(number){
resolve (`OK ${number}`);
console.log('Done!');
}
else
reject ('ERROR');
}, 500);
});
}
getRandomNumber();
结果:
首先,return 你的承诺,其次使用承诺提供的结果,方法是从它创建一个变量并等待它或使用 then
function getRandomNumber() {
return new Promise((resolve, reject) => {
console.log('Getting Random Number...');
let number = Math.random();
setTimeout(() => {
if (number) {
resolve(`OK ${number}`);
console.log('Done!');
} else {
reject('ERROR');
}
}, 500);
});
}
getRandomNumber().then(result => console.log(result));
(async () => {
const number = await getRandomNumber();
console.log(number);
})();
另一种选择是将sleep
编写为单独的可重用函数。注意 async
函数可以 await
多个值和 return
个值。调用 async
函数将 总是 return Promise -
function sleep(time) {
return new Promise(resolve => setTimeout(resolve, time))
}
async function getRandomNumber() {
console.log('Getting Random Number...')
await sleep(500)
const number = Math.random()
console.log("Done!")
return number
}
async function main() {
const number1 = await getRandomNumber()
console.log("number1", number1)
const number2 = await getRandomNumber()
console.log("number1", number2)
const number3 = await getRandomNumber()
console.log("number1", number3)
return number1 + number2 + number3
}
main().then(console.log, console.error)
.as-console-wrapper { min-height: 100%; }
Getting Random Number...
Done!
number1 0.2907058138817884
Getting Random Number...
Done!
number1 0.05784624607512423
Getting Random Number...
Done!
number1 0.889702848981964
1.2382549089388766
您需要 return 承诺,然后您可以在 async
函数中使用 await
来获取结果
function getRandomNumber () {
return new Promise ((resolve,reject) =>{
console.log('Getting Random Number...');
let number = Math.random();
setTimeout( () => {
if(number){
resolve (`OK ${number}`);
console.log('Done!');
}
else
reject ('ERROR');
}, 500);
});
}
const printNumber = async () => console.log(await getRandomNumber());
printNumber();