这里的关键是我希望我的函数返回我从另一个函数异步接收的值。 结构如下:
const https = require('https');
function getNumPages(substr) {
let totalPages = 0;
console.log(`Before makeRequest ${totalPages}`); //0
makeRequest(substr,(numPages)=>{
console.log(`Inside callback from makeRequest${numPages}`); //79
totalPages = numPages;
});
console.log(`After makeRequest${totalPages}`); //0
return totalPages;
}
让getNumPages 返回来自makeRequest的值的最佳方法是什么? 我理解代码的异步性质,并且在makeRequest函数调用其回调之前执行返回值。
我希望能够使用字符串调用getNumPages,比如getNumPages('Shakespeare'),makeRequest将调用API,获取数据库中莎士比亚的页数,然后getNumPages返回整数。 我知道在makeRequest的回调中我有适当数量的页面,但是说我不想在那里工作,我只想从getNumPages返回它。
答案 0 :(得分:0)
只是回复一个承诺,这是唯一的方式。
但是......您可以使用async / await使其看起来像一个同步代码 无论如何,它只会使用引擎盖下的承诺。但它的外观和行为就像你想要的那样(我认为)
答案 1 :(得分:0)
您可以使用async/await语法
function checkData() {
console.log('checking image size...');
var img = new Image();
var images = document.getElementsByName('img');
var ctx = document.getElementById('canvas').getContext('2d');
img.onload = function() {
if (img.width != 385 || img.height != 345) {
console.log("Wrong size: " + img.width + " X " + img.height);
} else {
ctx.drawImage(this, 20, 20);
console.log("The image is drawn.");
}
}
img.onerror = function(e) {
console.log("Not ok", e);
}
img.src = URL.createObjectURL(images[0].files[0]);
}
var myform = document.getElementById('myform');
myform.addEventListener('submit', function(e) {
e.preventDefault();
checkData();
});