Ты на самом деле почти там. Все, что вам нужно, это присвоить значение разрешенного обещания result
, вместо того, чтобы назначать объект Promise напрямую. Это делается с помощью result = await double(<param1>, <param2>)
.
. Однако, поскольку JS еще не поддерживает ожидание верхнего уровня, вам нужно обернуть все result
логи назначения c в другой асин c функции, а затем вызвать его так:
function promisify(number, increase){
return new Promise(resolve => setTimeout(() => resolve(number * 2 + increase), 100))
}
async function double(number, increase) {
const value = await promisify(number, increase);
return value;
}
async function run() {
let result;
result = await double(5, 0)
result = await double(10, result)
result = await double(20, result)
console.log(result)
}
run();
Однако, глядя на ваш код, функция double
, похоже, служит только оболочкой. Ваш код может быть легко переписан, так что вы сразу же выполните расчет, но просто немного подождите, прежде чем выполнить обещание:
// Simply forces the async operation to wait for a set duration
function wait(duration){
return new Promise(resolve => setTimeout(resolve, duration));
}
async function double(number, increase) {
await wait(100);
return (number * 2) + increase;
}
async function run() {
let result;
result = await double(5, 0)
result = await double(10, result)
result = await double(20, result)
console.log(result)
}
run();
Таким образом, вы можете реализовать желаемое рандомизированное время ожидания вопроса, если хотите, например:
// Waits between [1, 1000] milliseconds
await wait(Math.random() * 1000);