我想使用promises,但我有一个回调API,格式如下:
window.onload; // set to callback
...
window.onload = function() {
};
Run Code Online (Sandbox Code Playgroud)
function request(onChangeHandler) {
...
}
request(function() {
// change happened
...
});
Run Code Online (Sandbox Code Playgroud)
function getStuff(dat, callback) {
...
}
getStuff("dataParam", function(err, data) {
...
})
Run Code Online (Sandbox Code Playgroud)
API;
API.one(function(err, data) {
API.two(function(err, data2) {
API.three(function(err, data3) {
...
});
});
});
Run Code Online (Sandbox Code Playgroud)
我在Node.js中从回调函数返回一个值时遇到小麻烦,我会尽量解释我的情况.考虑我有一个片段,它接受URL并点击该url并给出输出:
urllib.request(urlToCall, { wd: 'nodejs' }, function (err, data, response) {
var statusCode = response.statusCode;
finalData = getResponseJson(statusCode, data.toString());
});
Run Code Online (Sandbox Code Playgroud)
我试图将它包装在一个函数中并返回一个这样的值:
function doCall(urlToCall) {
urllib.request(urlToCall, { wd: 'nodejs' }, function (err, data, response) {
var statusCode = response.statusCode;
finalData = getResponseJson(statusCode, data.toString());
return finalData;
});
}
Run Code Online (Sandbox Code Playgroud)
因为在我的Node.js代码中,我有很多if-else声明urlToCall将决定其值,如下所示:
if(//somecondition) {
urlToCall = //Url1;
} else if(//someother condition) {
urlToCall = //Url2;
} else {
urlToCall = //Url3;
}
Run Code Online (Sandbox Code Playgroud)
事情是urllib.request,除了值之外,一个遗嘱中的所有陈述都保持不变urlToCall.所以我肯定需要将这些公共代码放在函数中.我尝试了同样但doCall总是会回报我undefined.我试过这样的: …
以下函数从url获取和映像,加载它,并返回其宽度和高度:
function getImageData (url) {
const img = new Image()
img.addEventListener('load', function () {
return { width: this.naturalWidth, height: this.naturalHeight }
})
img.src = url
}
Run Code Online (Sandbox Code Playgroud)
问题是,如果我做这样的事情:
ready () {
console.log(getImageData(this.url))
}
Run Code Online (Sandbox Code Playgroud)
我得到undefined因为函数运行但imaged尚未加载.
如何使用await/async仅在照片加载且宽度和高度已经可用时返回值?