【问题标题】:how to resolve promise when function is called? p5.js调用函数时如何解决promise? p5.j​​s
【发布时间】:2019-12-14 18:02:40
【问题描述】:
var myPromise = new Promise(async function(resolve, reject){
        // idon't want to resolve after 10seconds... i want to resovle it after show_me function get called and finsih it's job.....
      setTimeout(resolve, 10000)
    });


    let xarr = [];
    let yarr = [];
    async function show_me(){
        console.log("called");

        let url = 'http://localhost:3000/get_transaction2';
        let response = await fetch(url);

        let commits = await response.json(); // read response body and parse as JSON
        for(let i= 0; i<commits.length; i++){
            let lastdate = commits[i].last_date;
            let cl = commits[i].collect_location.split(' ');
            let battery = commits[i].battery_left;
            let broked = commits[i].broken;

            collect_point = new jsPoint(cl[0],cl[1]);

            var font=new jsFont("arial","bold","10px");
            gr.drawText(`${cl}`,new jsPoint(cl[0],cl[1]),font,bluePen.color,90);
            // let x = cl[0] -700;
            // let y = -(Number(cl[1])) -400;
            let x = cl[0];
            let y = -(Number(cl[1]))
            console.log(x,y);

            xarr[i] = x;
            yarr[i] = y;


            if(battery<77 || Math.pow(x,2)+Math.pow(y,2)>=Math.pow(290,2)){

                plotPointsred(collect_point);
            }
            if(broked == 1){
                plotPointsgreen(collect_point);
            }

        }


        var greenPen=new jsPen(new jsColor("yellow"),5);
        gr.drawCircle(greenPen,new jsPoint(700,-400),290);

    }



    var cities = [];

    var recordDistance;
    var bestEver;
   async function setup() {
        await myPromise;
        s = createCanvas(1000, windowHeight);
        s.position(0,0);
        s.style('z-index','1');
        console.log("did it worked?");
        for (var i = 0; i < xarr.length; i++) {
            var v = createVector(xarr[i], yarr[i]);
            cities[i] = v;
        }

        var d = calcDistance(cities);
        recordDistance = d;
        bestEver = cities.slice();
      }

这是 p5.js 的事情,我想做的是关注

我希望 setup() 等到 --> show_me() 被调用并完成其工作,然后解决承诺(无论如何都不必承诺,如果我可以将 setup() 设置为等到 show_me 被调用并完成)以便 setup() 可以完成它的工作。

如果你不熟悉 p5.js 的东西,这是我的问题。我设置了一个函数来在 10 秒后解决承诺,因为当我打开 index.html 时会立即调用 setup() 函数。 setTimeout() 函数是我知道如何延迟解决承诺的唯一选项。

我的英语不好,所以如果有什么对你没有意义的,请告诉我。 感谢您的阅读,我一直很欣赏 stackoverflow,谢谢

【问题讨论】:

  • 为什么不在show_me 函数的末尾直接调用resolve()?它的内容是异步的,但是使用了await,所以它是按顺序从上到下运行的。
  • 几乎唯一需要使用 Promise 构造函数的时候是当你必须使用基于回调的时候。在这里,fetch 返回一个承诺,而你的 show_me 返回一个承诺,你可以简单地 await 它(或者.then(/*...*/))。

标签: javascript promise p5.js


【解决方案1】:

show_me 完成后,您可以使用awaitresolve 调用show_me 函数,就像在 cmets 中建议的@Chris 一样。

var myPromise = new Promise(async function(resolve, reject){
  await show_me();
  resolve();
});

但老实说,你为什么要使用 Promise 来检查另一个 Promise 是否完成? 执行以下示例将获得相同的结果。

async function setup() {
  await show_me(); // Instead of await myPromise
  ...

【讨论】:

    猜你喜欢
    • 2014-11-24
    • 1970-01-01
    • 2016-04-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多