相关疑难解决方法(0)

A returned Promise with Fetch doesn't respond to .then()

I'm a bit confused here, this part of some async code isn't working. Here's the problem:

export async function active() {
    return new Promise(function(resolve,reject){
        fetch("https://api.spotify.com/v1/me", { //omitted headers to keep it clean
        }).then(response => console.log(response)) <-- This code runs, and will log a response
        .then(data => function(){ <-- but this won't
            console.log("This won't run either")
            if (data.status == 200) {
                console.log(true)
                resolve(data)
            } else {
                console.log(false)
                reject(data)
            }
        })
    })
}
Run Code Online (Sandbox Code Playgroud)

Why isn't the second part running? Sorry, I'm a …

javascript asynchronous

0
推荐指数
1
解决办法
34
查看次数

如何在嵌套的Promise中传播resolve()?

我正在编写一个React应用程序,在某些情况下,我必须解决嵌套的Promise。代码可以正常工作,但是我无法将resolve()函数传播到外部层次,因此无法获得返回值。

这是代码:

  writeData(data) {
    this.store.dispatch({type: "START_LOADER"})

    return new Promise((resolve, reject) => {
      this.manager.isDeviceConnected(this.deviceId).then(res => {
        this.manager.startDeviceScan(null, null, (error, device) => {
          if (device.id === this.deviceId) {

            resolve("test") // -> this is propagate correctly

            device.connect().then((device) => {
              this.store.dispatch({type: "SET_STATUS", payload: "Device is connected!\n"})
              return device.discoverAllServicesAndCharacteristics()
            }).then((device) => {
              device.writeCharacteristicWithoutResponseForService(
                data.serviceId,
                data.charId,
                data.dataToWrite
              ).then(res => {

                resolve("test2") // -> this is not propagated

              }).catch(error => {
                reject(error.message)
              })
            }).catch((error) => {
              reject(error.message)
            });
          }
        });
      }).catch(error => {
        reject(error.message)
      }) …
Run Code Online (Sandbox Code Playgroud)

javascript promise reactjs

0
推荐指数
1
解决办法
70
查看次数

为什么 Promise.all() 不能与异步函数一起使用?

我正在探索 Promise.all() 的使用,但我不知道为什么它没有给我预期的结果。我尝试一步一步地说明它。

让我们看一下我的代码:

var p2 = 1337;
var p3 = new Promise((resolve, reject) => {
  setTimeout(resolve, 2000, 'foo');
});


var apiCall = async () =>{
    // to simulate a api call that will response after 5 sec 
     setTimeout(() => {return 1000}, 5000); 
    
}

Promise.all([p2,p3,apiCall()]).then(values => {
  console.log(values); // [3, 1337, undefine], but I expect  [3, 1337, 1000]
});

apiCall().then((response)=>{console.log(response)})
Run Code Online (Sandbox Code Playgroud)

据我了解,async 函数会立即返回一个 Promise,这就是 Promise.all 会等待的。

所以我期望,

.then(values => {
  console.log(values); // [3, 1337, undefined]
});
Run Code Online (Sandbox Code Playgroud)

5秒后才会执行。

但 2 秒后的输出已经如下所示,而不是 [3, …

javascript es6-promise

0
推荐指数
1
解决办法
210
查看次数

带有 async/await 的 Promise

我想知道这个承诺是否可以。因为我正在使用await它们内部。

示例1:

new Promise(async (resolve, reject) => {
    await fetch(url, postReq)
      .then((data) => {
        return data.json();
      })
      .then((res) => {
        console.log(res);
        resolve("Message sent successfully");
      })
      .catch((error) => {
        console.log(error);
        reject(error);
      });
  });
Run Code Online (Sandbox Code Playgroud)

示例2:

  const sendEmail = async (reciever, data) => {
      new Promise(async (resolve, reject) => {
        console.log("Sending Email");
        try {
          // create reusable transporter object using the default SMTP transport
          let transporter = nodemailer.createTransport({
            service: "gmail",
            auth: {
              user: process.env.EMAIL_ADDRESS,
              pass: process.env.EMAIL_PASSWORD,
            },
          });

      // send mail …
Run Code Online (Sandbox Code Playgroud)

javascript node.js async-await

0
推荐指数
1
解决办法
143
查看次数

Javascript Promise 不进入 then()

我对 JavaScript Promise 有一个问题,其中一个 Promise 没有进入 then()

下面是我试图完成的代码。

背景:我之前没有使用过Promise,但是看过几篇文章。

    function doStart(){        
    var loadedMap = loadBasemap([layer0]);
    loadedMap.then(function (v) {
            view = loadView(MAP_CANVAS_ID, map);
            ...
        });
    ...
}
    
 function loadBasemap(layers) {
    if (LayerSettings && LayerSettings.hasOwnProperty('basemap') && LayerSettings.basemap.hasOwnProperty('baseMapLayers')) {
        new Promise(function () {
            updateToDefaultLayerSetting();
        }).then(function () {
            map = new Map({
                basemap: Basemap.fromJSON(LayerSettings.basemap),
                layers: layers
            });
        });
        return new Promise((resolve, reject) => resolve(map));
    }
    else {...}
}

async function updateToDefaultLayerSetting() {
    console.log("Calling default");
    const result = await actionDefaultBasemap();
    console.log(result);
}

var defaultBasemap;
function …
Run Code Online (Sandbox Code Playgroud)

javascript promise

0
推荐指数
1
解决办法
338
查看次数

Angular $ q和$ http用于数据绑定不起作用

我正在尝试使用服务制作基本数据并在我有数据时将其打印在屏幕上,但有些东西无法正常工作.

我的服务:

mymodule.factory('MyService', function($http, $q) {
    var service = {
        getData: function() {
            var dfd = $q.defer();
            $http.get(apiServerPath).success(function (data) {
                dfd.resolve(data);
            });
            return dfd.promise;
        }
    }

    return service
}
Run Code Online (Sandbox Code Playgroud)

我的控制器:

mymodule.controller('myCtrl', ['$scope', 'MyService', function($scope, MyService) {
     $scope.myvar = MyService.getData();
}
Run Code Online (Sandbox Code Playgroud)

HTML

<div> {{myvar}} </div>
Run Code Online (Sandbox Code Playgroud)

我从浏览器控制台可以看到什么 -

  1. myvar对象变成了一个promise对象
  2. 正在调用成功函数,并且"数据"中包含有效数据
  3. 对于我的问题和问题 - 当延迟对象解析时,控制器的变量不会改变 - 为什么?

http promise angularjs q angular-promise

-1
推荐指数
1
解决办法
199
查看次数

如何将累积的返回Promise值作为数组返回到Array.prototype.reduce()之后的.then()?

鉴于这种模式

someArray.reduce(function(p, item) {
  return p.then(function() {
    return someFunction(item);
  });
}, $.Deferred().resolve()).then(function() {
  // all done here
  // access accumulated fulfilled , rejected `Promise` values
}, function err() {

});
Run Code Online (Sandbox Code Playgroud)

什么方法可以将已完成的,被拒绝的Promise对象的累积值返回到.then(fulfilled)调用后的数组.reduce()

function someFunction(index) {
  console.log("someFunction called, index = " + index);
  var $deferred = $.Deferred();

  window.setTimeout(function() {
    $deferred.resolve();
  }, 2000);

  return $deferred.promise();
}
   
var someArray = [1,2,3,4,5];

someArray.reduce(function(p, item) {
  return p.then(function() {
    return someFunction(item);
  });
}, $.Deferred().resolve()).then(function(data) {
  // all done here
  console.log(data, …
Run Code Online (Sandbox Code Playgroud)

javascript arrays promise jquery-deferred

-5
推荐指数
1
解决办法
2364
查看次数