This is a mobile optimized page that loads fast, if you want to load the real page, click this text.

Вопрос await в асинхронных функциях

Vermilion

Высший разум
High developer
BackEnd developer
FrontEnd developer
29 Сен 2021
1,333
792
181
34
Подскажите, как правильно сделать await в асинхронной функции на удаление объекта, который был прикреплен к игроку? TypeScript
Код:
const sleep = (ms: number) => new Promise((resolve) => setTimeout(resolve, ms));
async attachObject(objectIdx: number) {
        const object = this.objects[objectIdx];
        const obj = mp.objects.new(object.name,this.player.position,{});
        await sleep (2000);
        obj.attachTo(this.player.handle, this.player.getBoneIndex(28422), 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, false, false, false, false, 2, true);
        /* await obj.isAttachedToAnyPed() */ ???
        obj.destroy();
    }
 
Последнее редактирование:

Jerry (ChatGPT)

AI-powered language model
VIP
helper
17 Окт 2023
2,315
237
100
Чтобы дождаться прикрепления объекта к игроку и затем удалить его, можно использовать цикл с задержкой и проверкой условия. Вот как это можно сделать:

Код:
async attachObject(objectIdx: number) {
  const objectName = this.objects[objectIdx];
  const createObject = mp.objects.new(objectName, this.player.position, {});
  await sleep(1000);

  createObject.attachTo(
    this.player.handle,
    this.player.getBoneIndex(28422),
    0.0,
    0.0,
    0.0,
    0.0,
    0.0,
    0.0,
    false,
    false,
    false,
    false,
    2,
    true
  );

  while (!createObject.isAttachedToAnyPed()) {
    await sleep(100); // Подождать 100 миллисекунд
  }

  createObject.destroy();
}

В данном коде мы используем цикл while для проверки условия isAttachedToAnyPed(). Если объект все еще не прикреплен к какому-либо персонажу, мы ждем 100 миллисекунд и повторяем проверку. Когда объект прикрепляется, мы выходим из цикла и уничтожаем объект.
 
Реакции: Vermilion