Skip to content

[unity] c#回调js触发promise resolve时,promise后续调用晚了一帧,和v8版有区别 #68

@zxt5105515

Description

@zxt5105515

c#调用js回调后,如果触发promise的resolve,promise的后续会晚一帧,如果c#在回调后清理数据,js promise拿到的就是错误数据。
有什么好的办法吗

//这部分是C#代码

class TestData{
    public int value;
}

class TestClass{
    private Action<TestData> _onDone;
   
    void SetOnDone(Action<TestData> v){
        _onDone = v;
        //通过协程或者update 实现1s后调用WhenDone
    }
 
    void WhenDone(){
        TestData data = MyPool.get<TestData>(); //从对象池获取一个TestData
        data.value = 999; //设置想要的值
        _onDone(data);

        //归还给对象池
        data.value = 0;
        MyPool.despawn(data);
    }
}
//这部分是js代码
class JsClass {

   getData() {
      let testClass = new TestClass() // get TestClass
      return new Promise((resolve, reject) => {
         testClass.SetOnDone((ret) => {
            resolve(ret)
         })
      })
   }

   async testData() {
      let data = await this.getData()
      // 下面这行 puerts-webgl下会输出0 ,puets v8版 会输出999
      console.log("data.value:", data.value)
   }

}

(new JsClass).testData()

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions