代码是这样的。
//Extending a Nativescript module.
var test = ImageProvider.extend({
getImage: function(url){
//async call to get the image from cache
cacheService.getImage(url,
function(image){
return image
},
function(error){
return null
});
}
});
如何在提供图像之前阻止getImage函数返回? 我不想使用打字稿或babel来解决问题。但如果需要请提供建议。 (还试过babel,打字稿没有任何运气) 我试图通过设置:
来使用await和yield"android": {"v8Flags": "--expose_gc --use_strict --harmony"}
在package.json文件中没有成功。
使用yield
给出错误的示例"use strict"
function onNavigationgTo(args){
yield test();
}
function* test(){
return 1;
}
在添加yield关键字之前,它没有错误。使用产量给出以下内容。 SyntaxError:意外的严格模式保留字文件:"未知"
答案 0 :(得分:0)
您可以使用ES6 Promises。
var test = ImageProvider.extend({
getImage: function(url){
//async call to get the image from cache
return new Promise(function(resolve, reject) {
cacheService.getImage(url,
function(image){
resolve(image);
},
function(error){
reject(error);
});
});
}
});
然后像这样使用它
test.getImage('http://...').then(function(image) {
// do stuff
});
所有主流浏览器都支持原生承诺..除了IE(边缘支持)。 如果您希望获得更广泛的浏览器支持,建议您使用bluebird。
答案 1 :(得分:0)
你想做的事情可能不是一个好主意,因为它会在程序加载时阻止UI。通常通过回调或承诺/自定义任务实现来解决此问题。回调示例:
getImage: function(url, callback){
//async call to get the image from cache
cacheService.getImage(url,
function(image){
callback({ image: image, error: null });
},
function(error){
callback({ image: null, error: error });
});
}
然后用法看起来像
ImageProvider.getImage('someurl.png', function(result) {
if (result.image) {
// image has successfully downloaded -- good!
}
else {
// handle result.error
}
});