调用函数时如何解决承诺? p5.js
how to resolve promise when function is called? p5.js
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 秒后解析 promise,因为当我打开我的 index.html 时,setup() 函数会立即被调用。 setTimeout() 函数是我知道如何延迟解决承诺的唯一选项。
我不擅长英语,所以如果有什么对您来说没有意义,请告诉我。
感谢您的阅读我一直很欣赏 Whosebug 谢谢
您可以在 show_me
完成后使用 await
和 resolve
调用 show_me
函数,就像@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
...
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 秒后解析 promise,因为当我打开我的 index.html 时,setup() 函数会立即被调用。 setTimeout() 函数是我知道如何延迟解决承诺的唯一选项。
我不擅长英语,所以如果有什么对您来说没有意义,请告诉我。 感谢您的阅读我一直很欣赏 Whosebug 谢谢
您可以在 show_me
完成后使用 await
和 resolve
调用 show_me
函数,就像@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
...