这不是一个现实世界的问题,我只是想了解如何创造承诺.
我需要了解如何为一个不返回任何内容的函数做出承诺,比如setTimeout.
假设我有:
function async(callback){
setTimeout(function(){
callback();
}, 5000);
}
async(function(){
console.log('async called back');
});
Run Code Online (Sandbox Code Playgroud)
如何创建一个async可以在setTimeout准备好后返回的承诺callback()?
我想包装它会带我到某个地方:
function setTimeoutReturnPromise(){
function promise(){}
promise.prototype.then = function() {
console.log('timed out');
};
setTimeout(function(){
return ???
},2000);
return promise;
}
Run Code Online (Sandbox Code Playgroud)
但我想不到这一点.
在我的网络应用上工作时,特别是文件上传,Chrome在我发出提醒后显示警告:
在微任务执行期间调用'alert()'已弃用,将于2016年9月左右在M53中删除.有关详细信息,请参阅https://www.chromestatus.com/features/5647113010544640.
但是我认为在我的情况下,这个电话是合理的,并且有点担心一旦M53发布我的代码将无法工作.请注意,我没有使用警报运送到生产中,但是对于测试它非常有价值.
情况:
我正在使用react开发我的应用程序.我正在使用axios来做http请求.基本上http-post看起来像这样:
axios.post("/upload/", data)
.then((response: any) => {
callback(undefined);
})
.catch((error: any) => {
callback(error);
});
Run Code Online (Sandbox Code Playgroud)
然后在调用方法中,如果出现错误,我会弹出一个警告,这样我就可以确定测试人员/开发人员会收到通知.有点像:
this.service.uploadFile((error: any) => {
if (error) {
console.log(error);
alert("An error occured");
return;
}
this.onUploadCompleted()
});
Run Code Online (Sandbox Code Playgroud)
这是当chrome显示警告时.
首先,我想知道警告是否合理,因为警报会在请求完成并且返回错误之后显示.所以我很确定它不会阻挡任何东西.
如果它是合理的,可以做什么,所以我可以显示警报?