为什么我不能Error在catch回调中抛出一个内部并让进程处理错误,就好像它在任何其他范围内一样?
如果我什么都不做console.log(err)就会被打印出去,我对发生的事情一无所知.这个过程刚刚结束......
例:
function do1() {
return new Promise(function(resolve, reject) {
throw new Error('do1');
setTimeout(resolve, 1000)
});
}
function do2() {
return new Promise(function(resolve, reject) {
setTimeout(function() {
reject(new Error('do2'));
}, 1000)
});
}
do1().then(do2).catch(function(err) {
//console.log(err.stack); // This is the only way to see the stack
throw err; // This does nothing
});
Run Code Online (Sandbox Code Playgroud)
如果回调在主线程中执行,为什么Error会被黑洞吞噬?
在网上搜索异步函数,我发现很多文章使用setTimeout来完成这项工作:
window.setTimeout(function() {
console.log("second");
}, 0);
console.log("first");
Run Code Online (Sandbox Code Playgroud)
输出:
first
second
Run Code Online (Sandbox Code Playgroud)
这有效,但是最佳做法?
我想我对它的理解可能是由我与经验所影响.NET的async/await,所以我想一些代码示例:
我正在尝试使快速控制器在返回响应之前等待5秒钟:
const getUsers = async (ms) => {
var wait = ms => new Promise(resolve => setTimeout(resolve, ms));
await wait(ms);
};
export const index = (req, res) => {
async () => {
await getUsers(5000);
res.json([
{
id: 1,
name: 'John Doe',
},
{ id: 2,
name: 'Jane Doe',
},
]);
};
};
Run Code Online (Sandbox Code Playgroud)
此代码不起作用,浏览器保持加载和加载,从不显示任何东西.
getUser我根据这个SO答案和控制器方法建立的功能,基于我(错误的)理解它的工作方式,所以我想要一些澄清和纠正:
我应该什么时候使用await?
据我所知,你应该await在async函数调用之前使用.它是否正确?另外,为什么我可以在返回promise的非异步函数之前调用await?
我应该什么时候使用async?
根据我的理解,您将一个函数标记为一个函数,async以便可以使用await关键字调用它.它是否正确?另外,[为什么]我必须await …
我是本机反应的新手。我正在尝试使用async / await,但它不等待其他函数返回响应并立即发出警报,它将不等待4秒。这是我的代码,请帮助我。提前致谢:
import {
AsyncStorage,
Platform
} from 'react-native';
export const hello =async()=>{
const value=await refreshToken();
alert(value);
return "adasd";
}
const refreshToken=async()=>{
setTimeout(async()=>{
return true;
},4000);
}
Run Code Online (Sandbox Code Playgroud) javascript ×4
asynchronous ×2
async-await ×1
es6-promise ×1
jquery ×1
node.js ×1
promise ×1
react-native ×1
reactjs ×1
throw ×1
typescript ×1