相关疑难解决方法(0)

如何使用 $q 在 AngularJs 中多次回调承诺?

我使用下面的代码来简化后端请求,但我没有了解如何调用成功方法或错误方法。

如何达到代码中注释的预期行为?

 
app.factory('REST', function ($http, $q, sweetAlert) {

    返回 {
        负载:功能(模块,动作,数据){
            var deferred = $q.defer();
            var promise = deferred.promise;         
            $http
            .post('/api/'+module+'.php?action='+action, data)
            .成功(功能(数据){

                如果(数据错误)
                {
                    sweetAlert.swal({
                        标题:“错误”,
                        文本:数据错误,
                        类型:“警告”
                    });
                //这里我想调用 .error(details)
                }
                别的
                    deferred.resolve(data.result);

                        }).错误(函数(){
                //这里我想调用 .error(details)
            });

            promise.success = 函数(fn){
                承诺。然后(fn);
                回报承诺;
            }

            回报承诺;
        }
    };
});

这是使用上面代码的代码:

$scope.login = function () {
    $scope.loading = true;
    var payload = {'credentials': $scope.logindata};
    REST.load('access', 'login', payload).success(function(data) {
        if(data.redirect)
            $state.go(data.redirect);
        $scope.loading = false;
    }).error(function(data) { //THIS SHOULD BE CALLED
        $scope.loading = …
Run Code Online (Sandbox Code Playgroud)

callback promise deferred angularjs q

2
推荐指数
1
解决办法
1130
查看次数

对多个节点请求使用 Promise

有了request库,有没有办法使用 Promise 来简化这个回调?

  var context = {};

  request.get({
    url: someURL,
  }, function(err, response, body) {

    context.one = JSON.parse(body);

    request.get({
      url: anotherURL,
    }, function(err, response, body) {
      context.two = JSON.parse(body);

      // render page
      res.render('pages/myPage');
    });
  });
Run Code Online (Sandbox Code Playgroud)

node.js promise express

2
推荐指数
1
解决办法
1万
查看次数

使用Promise从Angularjs中的JSON文件读取数据

我有一个factory在获取json文件时向我提供的承诺:

myapp.factory('topAuthorsFactory', function($http, $q) {
    var factory = {
        topAuthorsList: false,
        getList: function() {
            var deffered = $q.defer();
            $http.get('../../data/top_10_authors.json')
                .success(function(data, status) {
                    factory.topAuthorsList = data;
                }).error(function(data, status) {
                    deffered.reject('There was an error getting data');
                });
            return deffered.promise;
        }
    };
    return factory;
});
Run Code Online (Sandbox Code Playgroud)

在我的controller我想要json在我的控制台上显示文件的内容如下:

myapp.controller('topAuthorsController', function($scope, topAuthorsFactory) {


  $scope.listAuthors = topAuthorsFactory.getList().then(function(topAuthorsList) {

      $scope.listAuthors = topAuthorsList;
      console.log('Testing...');

  }, function(msg) {
    alert(msg);
  });

  console.log($scope.listAuthors);
    }
Run Code Online (Sandbox Code Playgroud)

但是在我的控制台中,我得到了这个:

在此输入图像描述

那我怎么解决这个问题呢?为什么我在控制台中看不到"测试......"的消息?

promise angularjs angularjs-controller angularjs-factory angular-promise

2
推荐指数
1
解决办法
7059
查看次数

为什么JavaScript Promises有时既不使用.catch也不使用.then?

这可能是一个有很多答案的问题,或者你需要看到我的实际代码来帮助我.对于我所看到的行为,可能有一个原因(或少数原因).第一个问题:这是什么?如果是前者,我会撤回这个问题,这样人们就不会浪费时间.无论如何,我无法分享代码并且它比适当的更长.

我正在使用bluebird for Promises在Node.JS中编写JavaScript.我的部分代码适合这个模型.

const Promise = require('bluebird');
function a() {
  return new Promise(function(resolve, reject) {
    <... do something>
    <either> return resolve();
    <or> return reject();
  })
}

a()
.catch(error => { console.log('Used .catch   error=', error) })
.then(result => { console.log('Used .then   result=', result) });
Run Code Online (Sandbox Code Playgroud)

在我的代码的某些部分拟合这个模型,我看到一个日志语句的结果.在我的代码的其他部分适合这个模型,我也看不到.在后面的部分,当我跟踪执行路径与调试,它完成之后a,它把绿色的亮点就(error.catch(error => {next}合包含无极a,它.then和它的.catch,并next在(后通过一些蓝鸟代码会)}闭幕包含相同Promise的函数.

JSHint没有识别任何相关内容.

当我使用本机Promise时,我看到了非常相似的行为.我解决了它,然后代替bluebird Promises.现在我看到蓝鸟在不同的地方做同样的事情.

如果这是一个已知且易于描述的原因,我将非常感谢您的帮助.如果它大于那个,这个问题可能不属于Stack Overflow; 我会撤回它.

提前致谢.

javascript node.js promise bluebird

2
推荐指数
1
解决办法
283
查看次数

如何在异步代理/反射陷阱中捕获错误

如何捕获由Reflect.get(target, name, receiver)代理处理程序异步引发的错误?

我正在使用ProxyReflect来包装API类,以便可以捕获任何网络异常并向用户正常显示错误消息。

//Wrapper.js

let handler = {
  get: (target, name, receiver) => {
    try {
      Reflect.get(target, name, receiver); //throws Error asynchronously
    } catch (e) {
      console.log('caught error', e);
    }
};

export default new Proxy(new API(), handler);
//App.js

import Wrapper from './Wrapper';

Wrapper.asyncFunction(); //throws uncaught Error
//API.js

class API {
  get user() {
    return new User()
  }
}
//User.js

class User {

  /**
   * List all users
   */
  all() {
    return …

javascript ecmascript-6

2
推荐指数
1
解决办法
862
查看次数

想要根据一系列其他承诺补充来回报承诺

继承我的代码:

var delete_card = function(){

  stripe.customers.deleteCard(
    this.service_id.stripe,
    this.credit_card[0].stripe_id
  )
  .then(function(obj){
    this.recipients.splice(0, 1);
    return this.save()
  })
}
Run Code Online (Sandbox Code Playgroud)

条带调用和保存调用都返回promise.

我如何从delete_card方法返回一个promise?

我会像新的Promise一样包装它们并从那里返回一个承诺吗?
我将如何构建,以便将错误和结果冒出来?

我希望能够像这样从调用者那里做一些事情:

delete_card
.then(...)
.catch(...)
Run Code Online (Sandbox Code Playgroud)

并继续撰写链式承诺?

javascript promise q bluebird

2
推荐指数
1
解决办法
73
查看次数

何时在Angularjs中使用$ q.defer()

我是Angularjs的新手,我正在学习本教程:http://mherman.org/blog/2015/07/02/handling-user-authentication-with-the-mean-stack/#.WE70iubhCM8 .但是我不明白何时使用$ q.defer().例如,在下面的Angularjs代码中,为什么要使用$ q.defer():

function login(username, password) {

      // create a new instance of deferred
      var deferred = $q.defer();

      // send a post request to the server
      $http.post('/user/login',
        {username: username, password: password})
        // handle success
        .success(function (data, status) {
          if(status === 200 && data.status){
            user = true;
            deferred.resolve();
          } else {
            user = false;
            deferred.reject();
          }
        })
        // handle error
        .error(function (data) {
          user = false;
          deferred.reject();
        });
Run Code Online (Sandbox Code Playgroud)

服务器端代码是:

router.post('/login', function(req, res, next) {
  passport.authenticate('local', function(err, user, info) …
Run Code Online (Sandbox Code Playgroud)

javascript promise angularjs mean-stack

2
推荐指数
2
解决办法
2万
查看次数

使用$ q链接返回函数的数组

我有一个函数数组,其中每个函数promise从ajax调用返回.

var promises = [];
if (form.$valid) { 
  Object.keys($scope.Model.Data.FormFiles).forEach(function (key) {
    var file = $scope.Model.Data.FormFiles[key];

    function uploadFile(){
        var deferred = $q.defer();
        var upload = Upload.upload({
            url: "/api/ir/funnelApi/UploadFile",
            data: { file: file }
        });

        upload.then(function (response) {                           
                // do something
                deferred.resolve(response.statusText);
            }, function (error) {
                deferred.reject(error.data);
            }, function (evt) {

        });             
        return deferred.promise;
    }       

    promises.push(uploadFile);
  });   
}
Run Code Online (Sandbox Code Playgroud)

我想要做的是,如果所有文件都已成功上传,那么做一些事情.

$q.all(promises).then(function (responses) {                    
   // do something
}, function (errors) {
   // if any of the file upload fails, it should come …
Run Code Online (Sandbox Code Playgroud)

javascript ajax promise angularjs q

2
推荐指数
1
解决办法
71
查看次数

什么是处理提取响应的正确方法

我有以下代码用于处理Magento 2 REST API。

return new Promise((resolve, reject) => {
      fetch(uri, { method, headers, body: JSON.stringify(data) })
        .then(response => {
          return response.json();
        })
        .then(responseData => {
          resolve(responseData);
        })
        .catch(error => {
          reject(error);
        });
    });
Run Code Online (Sandbox Code Playgroud)

我想添加响应状态检查,所以我已经开始像这样

return new Promise((resolve, reject) => {
      fetch(uri, { method, headers, body: JSON.stringify(data) })
        .then(response => {
          return {
            data: response.json(),
            ok: response.ok,
            status: response.statusText
          };
        })
        .then(responseResult => {
          if (responseResult.ok) {
            resolve(responseResult.data);
          } else {
            const error = responseResult.status || responseResult.data.message;
            reject(error);
          }
        }) …
Run Code Online (Sandbox Code Playgroud)

javascript fetch promise

2
推荐指数
1
解决办法
880
查看次数

使用Axios时应该使用Promises吗?

Axios被描述为基于Promise的,因此在使用Axios查询数据时是否需要返回新的Promise?

app.get('/api/nearbyRecommendations', async (req, res) => {

    if(!req.query) return res.send({ error: 'Please enable location to get recommendations.' })

    try {
        const { longitude, latitude } = req.query
        const locationName = await location.getLocationName(longitude, latitude)
        res.send(locationName)
    } catch (error) {
        res.send(error)
    }
})   
Run Code Online (Sandbox Code Playgroud)

我正在向MapBox API发出GET请求,但是即使为.xn()块中添加了一个新的Error,尽管为Axios请求设置了catch块,我也似乎从未收到任何错误。

const getLocationName = async (latitude, longitude) => {
    return new Promise((resolve, reject) => {
        axios.get(`https://api.mapbox.com/geocoding/v5/mapbox.places/${longitude},${latitude}.json?access_token=${darkSkyAPIKey}`, {json: true})
        .then(response => {
            if(!response.data) return reject({ error: 'No location found.' })

            resolve(response.data)
        }).catch(error => {
            reject(error)
        })
    })
}
Run Code Online (Sandbox Code Playgroud)

如果可能的话,请提供帮助并指出可能进行更改以遵循最佳实践的任何内容。

javascript fetch promise async-await axios

2
推荐指数
1
解决办法
78
查看次数