如何捕获地理位置特定错误以通知用户他们必须打开地理位置?
catch记录了一个名为PositionError的错误,如Mozilla文档" https://developer.mozilla.org/en-US/docs/Web/API/PositionError "中所述.
*注意:我的代码没有捕获错误,它只显示:
Uncaught (in promise) ReferenceError: PositionError is not defined
Run Code Online (Sandbox Code Playgroud)
码
getCurrentLocation() {
return new Promise((resolve, reject) => {
navigator.geolocation.getCurrentPosition(resolve, reject, {
enableHighAccuracy: true,
timeout: 5000,
maximumAge: 0
});
});
},
async inout() {
try {
let location = await this.getCurrentLocation();
let response = await axios.post(API.URL, {});
} catch (e) {
if(e instanceof PositionError) {
console.log('position error')
}
}
}
Run Code Online (Sandbox Code Playgroud) 我刚刚开始尝试类和异步等待。我使用的是 Node 版本 8.9.0 (LTS)。当 I 时console.log(this),我得到undefined而不是对对象的引用。
子处理程序.js
class Handler {
constructor(props) {
this.defaultRes = {
data: successMessage,
statusCode: 200
};
}
async respond(handler, reply, response = this.defaultRes) {
console.log(this); // why is `this` undefined????
try {
await handler;
return reply(response.data).code(response.statusCode)
} catch(error) {
return reply(error);
}
}
}
class SubHandler extends Handler {
constructor(props) {
super(props);
this.something = 'else';
}
makeRequest(request, reply) {
console.log(this); // why is `this` undefined!!
// in this case, doSomeAsyncRequest is …Run Code Online (Sandbox Code Playgroud) 我正在尝试在异步函数中记录语句,如下所示:
async generateCharts (insights) {
const { url } = await this.reportsClient.createReport(insights)
console.log('url from reports', url)
return this.parse(url)
}
Run Code Online (Sandbox Code Playgroud)
Log语句虽然没有出现,但我确定这是因为async函数.那是对的吗?无论如何要解决这个问题?
我正在尝试从API中获取数据,每次调用只返回1000个项目,我想以递归方式执行此操作,直到获得所有数据.
我事先不知道有多少项目,所以每次通话后我都要检查
如果调用是同步的,我会使用这样的东西:
function fetch(all, start) {
const newData = getData(start, 1000);
all = all.concat(newData);
return (newData.length === 1000) ? fetch(all, all.length) : all;
}
Run Code Online (Sandbox Code Playgroud)
但是,getData()这里的调用是异步的.使用a Promise.all()不起作用因为我事先不知道我需要多少次调用所以我无法准备一系列调用.
我有这样的感觉,我可以用发电机或用async/ 解决这个问题,await但我不知道怎么做.谁能指出我正确的方向?
如果它有所作为,我正在使用Angular 4.
作为标题,如何在浏览器中检测async/await es7支持?
那可能吗?
一个可以await是非承诺的,这很好。
所有这些表达式都是有效的,不会导致任何错误:
await 5
await 'A'
await {}
await null
await undefined
Run Code Online (Sandbox Code Playgroud)
等待不承诺有任何可检测的影响吗?为了避免潜在的错误,应该注意哪些行为上的差异?是否有任何性能差异?
以下两行是完全相同还是理论上不同?
var x = 5
var x = await 5
Run Code Online (Sandbox Code Playgroud)
怎么样?有什么例子可以证明区别吗?
PS:根据TypeScript作者,有一个区别:
var x = await 5;与...不同var x = 5;;var x = await 5;将在下一个tern中分配x 5,其中asvar x = 5;将立即评估。
在整个过程中我不断收到以下错误
SyntaxError: /Users/user1/npmprojects/experiments/test-reactstrap0/src/components/index.js: Support for the experimental syntax 'exportDefaultFrom' isn't currently enabled (15:8):
13 | export * from './ListItems';
14 |
> 15 | export FormField from './FormField';
Run Code Online (Sandbox Code Playgroud)
首先我安装插件:yarn add @babel/plugin-proposal-export-default-from --save-dev
我也尝试过安装yarn add babel-preset-stage-1 --save-dev
我尝试添加包含内容的 .babelrc 文件
{
"plugins": [
"@babel/plugin-proposal-export-default-from"
]
}
Run Code Online (Sandbox Code Playgroud)
我尝试将以下内容添加到我的 package.json 中
"babel": {
"presets": [
"es2015",
"stage-1",
"react"
],
"plugins": [
"@babel/plugin-proposal-export-default-from"
]
}
Run Code Online (Sandbox Code Playgroud) 我正在尝试异步异步尝试捕获块几天。
async function executeJob(job) {
// necessary variable declaration code here
try {
do {
let procedureRequests = await ProcedureRequestModel.find(filter, options);
// doing process here...
} while (fetchedCount < totalCount);
providerNPIIds = [...providerNPIIds];
// Fetch provider details
let providerDetails = await esHelper.getProvidersById(providerNPIIds, true);
try {
let updateProviderCount = await UserProvider.updateAll(
{
userId: userId
},
{
providers: providerNPIIds,
countByType: providerCountType
});
if(updateProviderCount) {
try {
let destroyJobId = await app.models.Job.destroyById(job.idd);
} catch (e) {
var err = new QueueError();
console.log(err instanceof …Run Code Online (Sandbox Code Playgroud) 我有承诺需要同步的对象.例如,第二个承诺在第一个承诺完成之前不应该起作用.如果第一个拒绝,则必须再次执行.
我已经实现了一些例子.这个很好用.调用getVal,等待2000ms,返回,i ++,再次调用getVal .....
getVal() {
return new Promise(function(resolve, reject) {
setTimeout(function(){ resolve(19) }, 2000);
});
}
async promiseController(){
for(var i =0;i<5;i++)
{
var _val = await this.getVal()
console.log(_val+'prom');
}
}
Run Code Online (Sandbox Code Playgroud)
但我需要控制一组promise对象.我想要做的是我有一个数据,我把它分成5块.在处理完第一部分(例如:发送到服务器)后,我想要处理第二部分,否则我必须再次处理第一部分.
这是我制作的原型实现
getVal() {
return new Promise(function(resolve, reject) {
setTimeout(function(){ resolve(19) }, 2000);
});
}
async promiseController(){
var proms=[]
for(var i =0;i<5;i++)
{
proms.push(this.getVal())
}
for(var i =0;i<5;i++)
{
var _val = await proms[i]
console.log(_val+'prom');
}
}
Run Code Online (Sandbox Code Playgroud)
此代码中的Promises对象按顺序工作.我如何修复下面的代码,以便它作为第一个例子同步工作.
在异步函数中将错误抛出到较高级别
这个
async create(body: NewDevice, firstTry = true): Promise<RepresentationalDevice> {
try {
return await this.dataAccess.getAccessToken()
} catch (error) {
throw error
}
}
Run Code Online (Sandbox Code Playgroud)
VS这个
async create(body: NewDevice, firstTry = true): Promise<RepresentationalDevice> {
return await this.dataAccess.getAccessToken()
}
Run Code Online (Sandbox Code Playgroud)
我的意思是在最后一级我必须抓住错误,并且在捕获时根本没有任何修改
这两种方法是否相同?我可以使用第二种方法而不会出现错误处理问题吗
ecmascript-2017 ×10
javascript ×9
async-await ×5
ecmascript-6 ×2
promise ×2
angular ×1
babeljs ×1
geolocation ×1
hapijs ×1
node.js ×1
reactjs ×1
recursion ×1
syntax ×1