gpt4 book ai didi

javascript - Promise 链不解析;什么是正确的修复方法?

转载 作者:行者123 更新时间:2023-12-04 09:30:43 25 4
gpt4 key购买 nike

我正在使用汇总为我的页面构建一个网络包。我有一个工作正常的 promise 链,但另一个试图加载未执行的 map 。
我已经设置了断点,我可以在最后一行看到断点 p().then((m)=>console.log)Q.spread(...) ,但其他 promise 的方法不会执行。
我怎么没能强制 promise 解决?
这是我的代码:

'use strict';

import Q from 'q';
import GoogleMapsApiLoader from 'google-maps-api-loader';

var getPositionIP = function() {
return new Q( (res,rej) => {
let oReq = new XMLHttpRequest();
oReq.onload = function (e) {
let loc = { coords: e };
res(loc);
}
oReq.open("GET","https://json.geoiplookup.io/");
oReq.responseType = "json";
oreq.send();
});
};

var getPositionGPS = function(options) {
return new Q( function(resolve, reject) {
if( navigator.geolocation ) {
navigator.geolocation.getCurrentPosition(resolve,reject,options);
} else {
reject();
}
});
};

let mapEngine = GoogleMapsApiLoader({
libraries: [],
apiKey: '<<google maps key>>'
});

let positionEngine = function() {
return getPositionGPS({})
.catch(() => getPositionIP());
};

let p = function() {
return Q.spread(positionEngine, mapEngine).then((pos,map) => {
var mapcontainer = document.getElementById("map");
return new map.Map(mapcontainer, {
center: {lat: pos.coords.latitude, lng: pos.coords.longitude},
zoom: 8
});
});
};

p().then((m)=>console.log);

最佳答案

不是这样Q.spread会工作。 promise 仍然只能解析为单个值,spread是关于影响回调将如何被调用。根据文档,您必须编写

return Q.spread([positionEngine, mapEngine], (pos, map) => {
或者
return Q.all([positionEngine, mapEngine]).spread((pos, map) => {
现代方法是使用参数解构语法:
return Q.all([positionEngine, mapEngine]).then(([pos, map]) => {
当您迁移到 ES6 promise 时,这也将起作用。

关于javascript - Promise 链不解析;什么是正确的修复方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62865627/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com